Fitur Detail SQL di PolarDB for MySQL digunakan untuk melakukan audit rinci terhadap operasi pembaruan dan penguncian pada database dan tabel, serta secara otomatis membuang catatan audit yang melebihi periode retensi.
Informasi latar belakang
Operasi pembaruan (seperti membuat atau menghapus kolom dan indeks) serta operasi penguncian pada database dan tabel dapat berdampak signifikan pada bisnis Anda. Log audit dari operasi ini sangat penting bagi tim O&M karena mencakup informasi seperti nama pengguna, alamat IP klien, waktu mulai, dan waktu akhir operasi.
Meskipun fitur log audit global dapat diaktifkan untuk semua pernyataan SQL, overhead auditnya sangat tinggi. Dalam beberapa kasus, bahkan diperlukan komponen tambahan untuk menyimpan catatan audit.
PolarDB for MySQL menyediakan fitur Detail SQL untuk melakukan audit rinci terhadap operasi pembaruan dan penguncian pada database dan tabel. Fitur ini menangkap catatan audit saat pernyataan SQL mulai dieksekusi dan menyimpannya di tabel sistem. Anda dapat menentukan periode retensi catatan audit sesuai kebutuhan bisnis. Catatan yang melebihi periode retensi akan dibuang secara otomatis. Fitur ini memiliki overhead audit yang rendah, dengan kapasitas penyimpanan satu catatan audit sebesar 1 KB. Sebagai contoh, jika tabel database diperbarui 1.024 kali dalam sehari dan periode retensi adalah 30 hari, hanya 30 MB ruang penyimpanan yang diperlukan.
Prasyarat
- Kluster PolarDB for MySQL 8.0.1 dengan versi revisi 8.0.1.1.31 atau lebih baru.
- Kluster PolarDB for MySQL 8.0.2 dengan versi revisi 8.0.2.2.12 atau lebih baru.
Parameter
| Parameter | Tingkat | Deskripsi |
| loose_awr_sqldetail_enabled | Global | Menentukan apakah akan mengaktifkan fitur Detail SQL. Nilai default: OFF. Nilai valid:
|
| loose_awr_sqldetail_switch | Global | Jenis operasi dari catatan audit. Nilai valid:
|
| loose_awr_sqldetail_retention | Global | Periode retensi catatan audit. Catatan yang melebihi periode retensi ini akan secara otomatis dibuang. Nilai valid: 0 hingga 18446744073709551615. Nilai default: 2592000. Unit: detik. |
Format tabel
sys.hist_sqldetail tersedia di PolarDB for MySQL untuk menyimpan catatan audit. Tabel ini dibuat secara otomatis saat sistem dimulai, sehingga tidak perlu membuatnya secara manual. Format tabel adalah sebagai berikut:CREATE TABLE `hist_sqldetail` (
`Id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
`State` varchar(16) COLLATE utf8mb4_bin DEFAULT NULL,
`Thread_id` bigint(20) unsigned DEFAULT NULL,
`Host` varchar(60) COLLATE utf8mb4_bin NOT NULL DEFAULT '',
`User` varchar(32) COLLATE utf8mb4_bin NOT NULL DEFAULT '',
`Client_ip` varchar(60) COLLATE utf8mb4_bin DEFAULT NULL,
`Db` varchar(64) COLLATE utf8mb4_bin DEFAULT NULL,
`Sql_text` mediumtext COLLATE utf8mb4_bin NOT NULL,
`Server_command` varchar(32) COLLATE utf8mb4_bin DEFAULT NULL,
`Sql_command` varchar(64) COLLATE utf8mb4_bin DEFAULT NULL,
`Start_time` timestamp(6) NULL DEFAULT NULL,
`Exec_time` bigint(20) DEFAULT NULL,
`Wait_time` bigint(20) DEFAULT NULL,
`Error_code` int(11) DEFAULT NULL,
`Rows_sent` bigint(20) DEFAULT NULL,
`Rows_examined` bigint(20) DEFAULT NULL,
`Rows_affected` bigint(20) DEFAULT NULL,
`Logical_read` bigint(20) DEFAULT NULL,
`Phy_sync_read` bigint(20) DEFAULT NULL,
`Phy_async_read` bigint(20) DEFAULT NULL,
`Process_info` text COLLATE utf8mb4_bin,
`Extra` text COLLATE utf8mb4_bin,
`Create_time` timestamp(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6),
`Update_time` timestamp(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6) ON UPDATE CURRENT_TIMESTAMP(6),
PRIMARY KEY (`Id`),
KEY `i_start_time` (`Start_time`),
KEY `i_update_time` (`Update_time`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin;Berikut ini adalah deskripsi parameter dalam tabel sistem.| Parameter | Deskripsi |
| Id | ID auto-increment. |
| State | Keadaan di mana operasi dicatat. |
| Thread_id | ID thread yang mengeksekusi pernyataan SQL. |
| Host | Pengguna yang mengeksekusi pernyataan SQL. |
| User | Nama pengguna yang digunakan untuk mengeksekusi pernyataan SQL. |
| Client_ip | Alamat IP klien yang digunakan untuk mengeksekusi pernyataan SQL. |
| Db | Nama database tempat pernyataan SQL dieksekusi. |
| Sql_text | Pernyataan SQL yang dieksekusi. |
| Server_command | Perintah server yang digunakan untuk mengeksekusi pernyataan SQL. |
| Sql_command | Jenis pernyataan SQL. |
| Start_time | Waktu ketika pernyataan SQL mulai dieksekusi. |
| Exec_time | Durasi eksekusi pernyataan SQL. Unit: mikrodetik. |
| Wait_time | Waktu tunggu sebelum pernyataan SQL dieksekusi. Unit: mikrodetik. |
| Error_code | Kode kesalahan. |
| Rows_sent | Jumlah baris yang dikembalikan. |
| Rows_examined | Jumlah baris yang dipindai. |
| Rows_affected | Jumlah baris yang terpengaruh. |
| Logical_read | Jumlah pembacaan logis. |
| Phy_sync_read | Jumlah pembacaan sinkron fisik. |
| Phy_async_read | Jumlah pembacaan asinkron fisik. |
| Process_info | Informasi pemrosesan, yang merupakan bidang yang diperluas. |
| Extra | Informasi tambahan, yang merupakan bidang yang diperluas. |
| Create_time | Waktu ketika catatan dibuat. |
| Update_time | Waktu ketika catatan diperbarui. |
Contoh
- Atur parameter
loose_awr_sqldetail_enabledke ON di konsol, lalu jalankan pernyataan berikut pada database:create table t(c1 int); Query OK, 0 rows affected (0.02 sec) create table t(c1 int); ERROR 1050 (42S01): Table 't' already exists alter table t add column c2 int; Query OK, 0 rows affected (0.02 sec) Records: 0 Duplicates: 0 Warnings: 0 lock tables t read; Query OK, 0 rows affected (0.00 sec) unlock tables; Query OK, 0 rows affected (0.00 sec) insert into t values(1, 2); Query OK, 1 row affected (0.00 sec) - Jalankan pernyataan berikut untuk melihat catatan audit di tabel
sys.hist_sqldetail:
Hasil sampel:select * from sys.hist_sqldetail\G
Hasil di atas menunjukkan bahwa fitur Detail SQL hanya mencatat operasi DDL, LOCK DB, dan LOCK TABLE, tetapi tidak mencakup operasi DML. Selain itu, fitur ini mencatat semua informasi yang relevan ke tabel sistem saat pernyataan SQL mulai dieksekusi dan memperbarui status setelah eksekusi selesai.*************************** 1. row *************************** Id: 1 State: FINISH Thread_id: 18 Host: localhost User: root Client_ip: 127.0.0.1 Db: test Sql_text: create table t(c1 int) Server_command: Query Sql_command: create_table Start_time: 2023-01-13 16:18:21.840435 Exec_time: 17390 Wait_time: 318 Error_code: 0 Rows_sent: 0 Rows_examined: 0 Rows_affected: 0 Logical_read: 420 Phy_sync_read: 0 Phy_async_read: 0 Process_info: NULL Extra: NULL Create_time: 2023-01-13 16:18:22.391407 Update_time: 2023-01-13 16:18:22.391407 *************************** 2. row *************************** Id: 2 State: FINISH Thread_id: 18 Host: localhost User: root Client_ip: 127.0.0.1 Db: test Sql_text: create table t(c1 int) Server_command: Query Sql_command: create_table Start_time: 2023-01-13 16:18:22.416321 Exec_time: 822 Wait_time: 229 Error_code: 1050 Rows_sent: 0 Rows_examined: 0 Rows_affected: 0 Logical_read: 55 Phy_sync_read: 0 Phy_async_read: 0 Process_info: NULL Extra: NULL Create_time: 2023-01-13 16:18:23.393071 Update_time: 2023-01-13 16:18:23.393071 *************************** 3. row *************************** Id: 3 State: FINISH Thread_id: 18 Host: localhost User: root Client_ip: 127.0.0.1 Db: test Sql_text: alter table t add column c2 int Server_command: Query Sql_command: alter_table Start_time: 2023-01-13 16:18:34.123947 Exec_time: 16420 Wait_time: 245 Error_code: 0 Rows_sent: 0 Rows_examined: 0 Rows_affected: 0 Logical_read: 778 Phy_sync_read: 0 Phy_async_read: 0 Process_info: NULL Extra: NULL Create_time: 2023-01-13 16:18:34.394067 Update_time: 2023-01-13 16:18:34.394067 *************************** 4. row *************************** Id: 4 State: FINISH Thread_id: 18 Host: localhost User: root Client_ip: 127.0.0.1 Db: test Sql_text: lock tables t read Server_command: Query Sql_command: lock_tables Start_time: 2023-01-13 16:19:49.891559 Exec_time: 145 Wait_time: 129 Error_code: 0 Rows_sent: 0 Rows_examined: 0 Rows_affected: 0 Logical_read: 0 Phy_sync_read: 0 Phy_async_read: 0 Process_info: NULL Extra: NULL Create_time: 2023-01-13 16:19:50.399585 Update_time: 2023-01-13 16:19:50.399585 *************************** 5. row *************************** Id: 5 State: FINISH Thread_id: 18 Host: localhost User: root Client_ip: 127.0.0.1 Db: test Sql_text: unlock tables Server_command: Query Sql_command: unlock_tables Start_time: 2023-01-13 16:19:56.924648 Exec_time: 98 Wait_time: 0 Error_code: 0 Rows_sent: 0 Rows_examined: 0 Rows_affected: 0 Logical_read: 0 Phy_sync_read: 0 Phy_async_read: 0 Process_info: NULL Extra: NULL Create_time: 2023-01-13 16:19:57.400294 Update_time: 2023-01-13 16:19:57.400294