全部产品
Search
文档中心

PolarDB:Detail SQL

更新时间:Jul 06, 2025

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 Anda harus memenuhi salah satu persyaratan berikut:
  • 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.
Untuk informasi tentang cara memeriksa versi kluster Anda, lihat Kueri versi mesin.

Parameter

Anda dapat mengonfigurasi parameter berikut di konsol untuk mengaktifkan fitur Detail SQL dan menetapkan periode retensi catatan audit. Untuk informasi lebih lanjut tentang cara menyetel parameter, lihat Konfigurasikan parameter kluster dan node.
ParameterTingkatDeskripsi
loose_awr_sqldetail_enabledGlobalMenentukan apakah akan mengaktifkan fitur Detail SQL. Nilai default: OFF. Nilai valid:
  • OFF
  • ON
loose_awr_sqldetail_switchGlobalJenis operasi dari catatan audit. Nilai valid:
  • ddl: menentukan apakah akan mencatat operasi DDL. Nilai default: ON. Nilai valid:
    • ON
    • OFF
  • lock_db_table: menentukan apakah akan mencatat operasi LOCK DB dan LOCK TABLE. Nilai default: ON. Nilai valid:
    • ON
    • OFF
loose_awr_sqldetail_retentionGlobalPeriode 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

Tabel sistem 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.
ParameterDeskripsi
IdID auto-increment.
StateKeadaan di mana operasi dicatat.
Thread_idID thread yang mengeksekusi pernyataan SQL.
HostPengguna yang mengeksekusi pernyataan SQL.
UserNama pengguna yang digunakan untuk mengeksekusi pernyataan SQL.
Client_ipAlamat IP klien yang digunakan untuk mengeksekusi pernyataan SQL.
DbNama database tempat pernyataan SQL dieksekusi.
Sql_textPernyataan SQL yang dieksekusi.
Server_commandPerintah server yang digunakan untuk mengeksekusi pernyataan SQL.
Sql_commandJenis pernyataan SQL.
Start_timeWaktu ketika pernyataan SQL mulai dieksekusi.
Exec_timeDurasi eksekusi pernyataan SQL. Unit: mikrodetik.
Wait_timeWaktu tunggu sebelum pernyataan SQL dieksekusi. Unit: mikrodetik.
Error_codeKode kesalahan.
Rows_sentJumlah baris yang dikembalikan.
Rows_examinedJumlah baris yang dipindai.
Rows_affectedJumlah baris yang terpengaruh.
Logical_readJumlah pembacaan logis.
Phy_sync_readJumlah pembacaan sinkron fisik.
Phy_async_readJumlah pembacaan asinkron fisik.
Process_infoInformasi pemrosesan, yang merupakan bidang yang diperluas.
ExtraInformasi tambahan, yang merupakan bidang yang diperluas.
Create_timeWaktu ketika catatan dibuat.
Update_timeWaktu ketika catatan diperbarui.

Contoh

  1. Atur parameter loose_awr_sqldetail_enabled ke 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)
  2. Jalankan pernyataan berikut untuk melihat catatan audit di tabel sys.hist_sqldetail:
    select * from sys.hist_sqldetail\G
    Hasil sampel:
    *************************** 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
    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.