Jika parameter loose_sql_trace_type diatur ke DEMAND, Anda dapat menggunakan prosedur tersimpan dbms_sql.add_trace untuk menentukan pernyataan SQL yang perlu dilacak oleh fitur Jejak SQL.
Sintaksis
dbms_sql.add_trace('<schema>', '<query>')Setelah prosedur tersimpan dijalankan, konstanta dalam pernyataan SQL yang sedang dieksekusi secara otomatis dibuat menjadi templat dan membentuk sebuah templat. Pernyataan SQL yang sesuai dengan templat tersebut dilacak oleh fitur Jejak SQL.
Parameter
Parameter | Deskripsi |
schema | Nama dari skema. |
query | Pernyataan SQL yang sedang dieksekusi. |
Perhatian
Ketika prosedur tersimpan dijalankan pada node utama, eksekusi prosedur tersimpan disimpan secara permanen pada node utama, dan catatan eksekusi terkait dalam tabel mysql.sql_sharing dihapus serta disinkronkan ke node hanya-baca.
Ketika prosedur tersimpan dijalankan pada node hanya-baca, eksekusi prosedur tersimpan tidak disimpan secara permanen pada node tersebut. Prosedur tersimpan hanya dapat dijalankan pada node tersebut. Saat Anda menggunakan titik akhir kluster untuk mengakses database, pernyataan SQL yang telah dibuat templat secara otomatis diarahkan ke node utama.
Contoh
Anda dapat menjalankan pernyataan berikut untuk menentukan pernyataan SQL yang perlu dilacak oleh fitur Jejak SQL:
call dbms_sql.add_trace('test', 'select * from t where c1 > 1 and c1 < 10');Anda dapat menjalankan pernyataan berikut untuk menanyakan catatan eksekusi dari pernyataan SQL yang dilacak dalam tabel sistem mysql.sql_sharing:
select * from mysql.sql_sharing\GKeluaran berikut akan dikembalikan:
*************************** 1. baris ***************************
Id: (nomor id)
Sql_id: 82t4dswtqjg02
Schema_name: test
Type: SQL_TRACE
Digest_text: SELECT * FROM `t` WHERE `c1` > ? AND `c1` < ?
Plan_id: NULL
Plan: NULL
Version: 0
Create_time: 2022-11-07 19:05:27.980605
Update_time: 2022-11-07 19:05:27.980605
Extra_info: NULLKeluaran di atas menunjukkan bahwa konstanta dalam pernyataan SQL yang dilacak secara otomatis dibuat templat dan membentuk sebuah templat.
Anda dapat menjalankan pernyataan SQL berikut yang sesuai dengan templat:
select * from t where c1 > 1 and c1 < 10;
select * from t where c1 > 1 and c1 < 100;Anda dapat menjalankan pernyataan berikut untuk menanyakan informasi jejak dari pernyataan SQL yang dilacak dan statistik rencana eksekusi dari pernyataan SQL dalam tabel sistem information_schema.sql_sharing:
select * from information_schema.sql_sharing\GKeluaran berikut akan dikembalikan:
*************************** 1. baris ***************************
TYPE: SQL
SQL_ID: 82t4dswtqjg02
SCHEMA_NAME: test
DIGEST_TEXT: SELECT * FROM `t` WHERE `c1` > ? AND `c1` < ?
PLAN_ID: NULL
PLAN: NULL
PLAN_EXTRA: NULL
ERROR_CODE: NULL
REF_BY: SQL_TRACE(DEMAND)
FIRST_LOAD_TIME: 2022-11-07 19:05:28
LAST_HIT_TIME: 2022-11-07 19:17:24
EXECUTIONS: 2
SUM_WAIT_TIME: 363
MIN_WAIT_TIME: 179
MAX_WAIT_TIME: 184
SUM_EXEC_TIME: 925
MIN_EXEC_TIME: 438
MAX_EXEC_TIME: 487
SUM_ROWS_SENT: 106
MIN_ROWS_SENT: 8
MAX_ROWS_SENT: 98
SUM_ROWS_EXAMINED: 108
MIN_ROWS_EXAMINED: 8
MAX_ROWS_EXAMINED: 100
SUM_ROWS_AFFECTED: 0
MIN_ROWS_AFFECTED: 0
MAX_ROWS_AFFECTED: 0
SUM_LOGICAL_READ: 122
MIN_LOGICAL_READ: 19
MAX_LOGICAL_READ: 103
SUM_PHY_SYNC_READ: 0
MIN_PHY_SYNC_READ: 0
MAX_PHY_SYNC_READ: 0
SUM_PHY_ASYNC_READ: 0
MIN_PHY_ASYNC_READ: 0
MAX_PHY_ASYNC_READ: 0
EXTRA: {TRACE_ROW_ID:10}
*************************** 2. baris ***************************
TYPE: PLAN
SQL_ID: 82t4dswtqjg02
SCHEMA_NAME: test
DIGEST_TEXT: NULL
PLAN_ID: 5a4cvp4gjqgfj
PLAN: /*+ NO_INDEX(`t`@`select#1`) */
PLAN_EXTRA: {`t`@`select#1`:ALL}
ERROR_CODE: 0
REF_BY: SQL_TRACE(DEMAND)
FIRST_LOAD_TIME: 2022-11-07 19:17:24
LAST_HIT_TIME: 2022-11-07 19:17:24
EXECUTIONS: 1
SUM_WAIT_TIME: 184
MIN_WAIT_TIME: 184
MAX_WAIT_TIME: 184
SUM_EXEC_TIME: 487
MIN_EXEC_TIME: 487
MAX_EXEC_TIME: 487
SUM_ROWS_SENT: 98
MIN_ROWS_SENT: 98
MAX_ROWS_SENT: 98
SUM_ROWS_EXAMINED: 100
MIN_ROWS_EXAMINED: 100
MAX_ROWS_EXAMINED: 100
SUM_ROWS_AFFECTED: 0
MIN_ROWS_AFFECTED: 0
MAX_ROWS_AFFECTED: 0
SUM_LOGICAL_READ: 103
MIN_LOGICAL_READ: 103
MAX_LOGICAL_READ: 103
SUM_PHY_SYNC_READ: 0
MIN_PHY_SYNC_READ: 0
MAX_PHY_SYNC_READ: 0
SUM_PHY_ASYNC_READ: 0
MIN_PHY_ASYNC_READ: 0
MAX_PHY_ASYNC_READ: 0
EXTRA: NULL
*************************** 3. baris ***************************
TYPE: PLAN
SQL_ID: 82t4dswtqjg02
SCHEMA_NAME: test
DIGEST_TEXT: NULL
PLAN_ID: 463zszw4mbv3w
PLAN: /*+ INDEX(`t`@`select#1` `i_c1`) */
PLAN_EXTRA: {`t`@`select#1`:range}
ERROR_CODE: 0
REF_BY: SQL_TRACE(DEMAND)
FIRST_LOAD_TIME: 2022-11-07 19:17:21
LAST_HIT_TIME: 2022-11-07 19:17:21
EXECUTIONS: 1
SUM_WAIT_TIME: 179
MIN_WAIT_TIME: 179
MAX_WAIT_TIME: 179
SUM_EXEC_TIME: 438
MIN_EXEC_TIME: 438
MAX_EXEC_TIME: 438
SUM_ROWS_SENT: 8
MIN_ROWS_SENT: 8
MAX_ROWS_SENT: 8
SUM_ROWS_EXAMINED: 8
MIN_ROWS_EXAMINED: 8
MAX_ROWS_EXAMINED: 8
SUM_ROWS_AFFECTED: 0
MIN_ROWS_AFFECTED: 0
MAX_ROWS_AFFECTED: 0
SUM_LOGICAL_READ: 19
MIN_LOGICAL_READ: 19
MAX_LOGICAL_READ: 19
SUM_PHY_SYNC_READ: 0
MIN_PHY_SYNC_READ: 0
MAX_PHY_SYNC_READ: 0
SUM_PHY_ASYNC_READ: 0
MIN_PHY_ASYNC_READ: 0
MAX_PHY_ASYNC_READ: 0
EXTRA: NULLKesimpulan
Keluaran di atas menunjukkan bahwa pernyataan SQL di atas yang sesuai dengan templat berkorespondensi dengan rencana eksekusi berikut: pemindaian rentang indeks i_c1 dan pemindaian tabel penuh.