All Products
Search
Document Center

AnalyticDB:Persist\ plan\ dan\ Query\-Blocker

Last Updated:Mar 29, 2026

Persist plan dan query blocker memberi Anda kendali langsung atas cara AnalyticDB for MySQL mengeksekusi pernyataan SQL berparameter. Gunakan persist plan untuk mengunci petunjuk pengoptimal (optimizer hints) tertentu pada pola pernyataan, dan gunakan query blocker untuk mencegat serta memblokir pernyataan yang sesuai dengan pola tersebut—berfungsi sebagai firewall SQL. Kedua fitur ini memerlukan versi V3.1.4 atau lebih baru.

Cara kerja

AnalyticDB for MySQL mengidentifikasi pernyataan yang memiliki struktur sama melalui parameterisasi: mengganti konstanta dalam klausa seperti WHERE dan LIMIT dengan tanda tanya (?). Setiap struktur unik, yang disebut pattern, diberi sign value—pengenal hash untuk pola tersebut.

Persist plan menyambungkan petunjuk pengoptimal ke suatu pola. Setiap pernyataan yang sesuai dengan pola tersebut dijalankan dengan petunjuk tersebut diterapkan, tanpa mengubah SQL aslinya.

Query blocker bekerja dengan cara yang sama, tetapi alih-alih mengoptimalkan eksekusi, ia menolak semua pernyataan yang sesuai dengan pola tersebut.

Ketika fitur optimasi lanjutan diaktifkan pada suatu kluster, berbagai pernyataan dapat terpengaruh. Anda dapat menggunakan persist plan untuk mengontrol petunjuk mana yang diterapkan pada pernyataan dengan pola yang sama.
Menjalankan PERSIST_PLAN atau /*+query_blocker=true*/ PERSIST_PLAN tidak mengeksekusi pernyataan SQL target. Perintah tersebut hanya menyimpan konfigurasi petunjuk.

Kapan menggunakan masing-masing fitur

SituasiFitur
Pengoptimal memilih rencana eksekusi yang suboptimal untuk sekelompok kueri serupaPersist plan
Sekelompok kueri serupa menyebabkan masalah performa dan perlu segera dihentikanQuery blocker

Prasyarat

Sebelum memulai, pastikan Anda telah memiliki:

  • Kluster AnalyticDB for MySQL yang berjalan pada versi V3.1.4 atau lebih baru

  • Akses ke client MySQL (diperlukan untuk PERSIST_PLAN_CHECK—Data Management (DMS) tidak mengembalikan hasil untuk perintah ini)

Referensi sintaksis

OperasiSintaksis
Menghasilkan pola dan sign value untuk suatu pernyataanPARAMETERIZE $sql
Menyambungkan petunjuk ke suatu pola/*+hints*/ PERSIST_PLAN $sql
Memblokir semua pernyataan yang sesuai dengan suatu pola/*+query_blocker=true*/ PERSIST_PLAN $sql
Memeriksa apakah petunjuk telah dikonfigurasi untuk suatu pernyataanPERSIST_PLAN_CHECK $sql
Menampilkan semua pola yang memiliki petunjukSELECT * FROM INFORMATION_SCHEMA.KEPLER_PERSIST_PLAN_SUMMARY
Menghapus petunjuk berdasarkan pernyataan SQLDELETE_PLAN $sql
Menghapus petunjuk berdasarkan sign valueDELETE_PLAN_BY_SIGN $Sign

Contoh rencana persisten

Menghasilkan pola dan sign value

Jalankan PARAMETERIZE pada suatu pernyataan untuk melihat bagaimana AnalyticDB for MySQL melakukan normalisasi dan sign value yang dihasilkan:

PARAMETERIZE
SELECT t1.c1
FROM t1
    INNER JOIN t2 ON t1.c1 = t2.c1
WHERE t1.c2 < 9999;

Hasil:

SignPattern
2506ed2c1f53ea59a1ef996a98a50411SELECT t1.c1 FROM t1 INNER JOIN t2 ON t1.c1 = t2.c1 WHERE t1.c2 < ?

Sign value secara unik mengidentifikasi pola ini. Gunakan nilai tersebut untuk menghapus persist plan tanpa harus menentukan ulang SQL lengkapnya.

Menyambungkan petunjuk ke suatu pola

Untuk menerapkan algoritma nested_loop_join pada semua pernyataan yang sesuai dengan pola tersebut:

/*+nested_loop_join=true*/
PERSIST_PLAN
SELECT t1.c1
FROM t1
    INNER JOIN t2 ON t1.c1 = t2.c1
WHERE t1.c2 < 9999;

Pernyataan blok yang cocok dengan pola

Untuk mencegat semua pernyataan yang sesuai dengan suatu pola:

/*+query_blocker=true*/
PERSIST_PLAN
SELECT t1.c1
FROM t1
    INNER JOIN t2 ON t1.c1 = t2.c1
WHERE t1.c2 < 9999;

Hapus rencana persisten

Tersedia dua metode.

Berdasarkan pernyataan SQL:

DELETE_PLAN
SELECT t1.c1
FROM t1
    INNER JOIN t2 ON t1.c1 = t2.c1
WHERE t1.c2 < 9999;

Berdasarkan sign value:

DELETE_PLAN_BY_SIGN 2506ed2c1f53ea59a1ef996a98a50411;

Untuk mendapatkan sign value suatu pola, jalankan PARAMETERIZE $sql atau kueri INFORMATION_SCHEMA.KEPLER_PERSIST_PLAN_SUMMARY.

Verifikasi dan pantau persist plan

Periksa petunjuk pada pernyataan tertentu

Jalankan PERSIST_PLAN_CHECK untuk memastikan persist plan telah dikonfigurasi dan melihat berapa kali petunjuk tersebut telah diterapkan:

PERSIST_PLAN_CHECK
SELECT t1.c1
FROM t1
    INNER JOIN t2 ON t1.c1 = t2.c1
WHERE t1.c2 < 9999;

Hasil:

SignHinthitAppliedPattern
2506ed2c1f53ea59a1ef996a98a50411nested_loop_join=true12SELECT t1.c1 FROM t1 INNER JOIN t2 ON t1.c1 = t2.c1 WHERE t1.c2 < ?

Deskripsi kolom:

BidangDeskripsi
SignPengenal hash untuk pola tersebut
HintPetunjuk yang saat ini dikonfigurasi untuk pola tersebut
hitAppliedJumlah kali pola tersebut cocok sejak persist plan dibuat atau terakhir diperbarui. Nilai ini diatur ulang menjadi 0 setelah setiap pembaruan.
PatternBentuk parameterisasi dari pernyataan, dengan konstanta diganti oleh ?
Penting

PERSIST_PLAN_CHECK tidak mengembalikan hasil saat dijalankan di Data Management (DMS). Jalankan dari client MySQL untuk melihat output-nya.

Daftar semua pola yang dikonfigurasi

SELECT * FROM INFORMATION_SCHEMA.KEPLER_PERSIST_PLAN_SUMMARY;

Kueri ini mengembalikan semua pola yang saat ini memiliki persist plan dikonfigurasi, beserta petunjuk dan sign value-nya.