All Products
Search
Document Center

PolarDB:SQL\ Detail

Last Updated:Mar 29, 2026

SQL Detail mengaudit operasi DDL dan lock pada database serta tabel PolarDB for MySQL. Fitur ini menangkap konteks eksekusi setiap pernyataan dan secara otomatis menghapus catatan yang lebih lama dari periode retensi yang dikonfigurasi. Berbeda dengan fitur audit log lengkap—yang mengaudit setiap pernyataan SQL dengan overhead signifikan—SQL Detail hanya berfokus pada event perubahan skema dan lock, sehingga cocok untuk tim O&M (operations and maintenance) yang membutuhkan jejak audit ringan dan terarah.

Cara kerja

Saat pernyataan DDL atau lock mulai dieksekusi, SQL Detail menulis catatan ke tabel sistem sys.hist_sqldetail. Setelah pernyataan selesai, PolarDB memperbarui catatan tersebut dengan status akhir dan metrik performa. Catatan yang lebih lama dari periode retensi yang dikonfigurasi akan dihapus secara otomatis.

Apa yang ditangkap oleh SQL Detail:

  • Operasi DDL: perubahan skema seperti membuat tabel, menambah kolom, dan memodifikasi indeks

  • Operasi lock: pernyataan LOCK TABLE dan LOCK DB

Apa yang tidak ditangkap oleh SQL Detail:

Pernyataan DML (INSERT, UPDATE, DELETE, SELECT) sengaja tidak disertakan. SQL Detail dirancang untuk auditing perubahan skema dengan overhead rendah, bukan untuk pencatatan kueri umum. Untuk mengaudit pernyataan DML, aktifkan fitur audit log lengkap.

Penyimpanan

Setiap catatan audit mengonsumsi ruang penyimpanan sebesar 1 KB. Sebagai contoh, 1.024 operasi DDL atau lock per hari dengan periode retensi 30 hari mengonsumsi sekitar 30 MB.

Prasyarat

Sebelum memulai, pastikan kluster Anda memenuhi salah satu persyaratan versi berikut:

  • PolarDB for MySQL 8.0.1, versi revisi 8.0.1.1.31 atau lebih baru

  • PolarDB for MySQL 8.0.2, versi revisi 8.0.2.2.12 atau lebih baru

Untuk memeriksa versi revisi kluster Anda, lihat Query the engine version.

Aktifkan SQL detail

Konfigurasikan parameter berikut di Konsol. Untuk petunjuknya, lihat Specify cluster and node parameters.

ParameterLevelDefaultNilai validDeskripsi
loose_awr_sqldetail_enabledGlobalOFFON, OFFMengaktifkan atau menonaktifkan SQL detail
loose_awr_sqldetail_switchGlobalddl: ON; lock_db_table: ONddl: ON/OFF; lock_db_table: ON/OFFMengontrol jenis operasi yang diaudit. ddl mencakup pernyataan DDL; lock_db_table mencakup pernyataan LOCK TABLE dan LOCK DB
loose_awr_sqldetail_retentionGlobal25920000–18446744073709551615Periode retensi untuk catatan audit, dalam detik. Catatan yang lebih lama dari nilai ini akan dihapus secara otomatis

Tabel sys.hist_sqldetail

PolarDB for MySQL secara otomatis membuat tabel sistem sys.hist_sqldetail saat startup. Tidak diperlukan pembuatan manual.

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;

Referensi kolom

KolomDeskripsi
IdID catatan auto-increment
StateStatus operasi saat catatan ditulis
Thread_idID thread yang mengeksekusi pernyataan
HostHost yang terkait dengan pengguna yang mengeksekusi
UserNama pengguna yang digunakan untuk mengeksekusi pernyataan
Client_ipAlamat IP klien
DbDatabase tempat pernyataan dieksekusi
Sql_textTeks lengkap pernyataan SQL
Server_commandJenis perintah server (misalnya, Query)
Sql_commandJenis pernyataan (misalnya, create_table, alter_table, lock_tables)
Start_timeTimestamp saat eksekusi dimulai (presisi mikrodetik)
Exec_timeDurasi eksekusi, dalam mikrodetik. Gunakan ini untuk mengidentifikasi operasi DDL yang tidak biasa lambat
Wait_timeWaktu tunggu pernyataan sebelum eksekusi dimulai, dalam mikrodetik. Nilai tinggi mungkin mengindikasikan kontensi lock
Error_codeKode error. Nilai bukan nol berarti pernyataan gagal; gunakan ini untuk melacak perubahan skema yang gagal
Rows_sentJumlah baris yang dikembalikan
Rows_examinedJumlah baris yang dipindai
Rows_affectedJumlah baris yang terpengaruh
Logical_readJumlah bacaan logis
Phy_sync_readJumlah physical synchronous read
Phy_async_readJumlah physical asynchronous read
Process_infoInformasi pemrosesan tambahan
ExtraInformasi Tambahan
Create_timeTimestamp saat catatan dibuat
Update_timeTimestamp saat catatan terakhir diperbarui

Contoh

Contoh ini menunjukkan bagaimana SQL Detail menangkap operasi DDL dan lock sambil mengabaikan DML.

Langkah 1: Atur loose_awr_sqldetail_enabled ke ON di Konsol, lalu jalankan pernyataan berikut:

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)

Langkah 2: Kueri catatan audit:

select * from sys.hist_sqldetail\G

Output yang diharapkan:

*************************** 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

Output berisi lima catatan—satu untuk setiap pernyataan DDL dan lock. Pernyataan insert into t values(1, 2) tidak dicatat karena SQL Detail tidak menangkap operasi DML.

Baris 2 menunjukkan Error_code: 1050 untuk upaya CREATE TABLE yang duplikat. SQL Detail mencatat baik pernyataan yang berhasil maupun yang gagal, memberikan personel O&M riwayat lengkap upaya perubahan skema, termasuk yang gagal.