Fitur persist plan dapat menyimpan petunjuk dalam pernyataan SQL berparameter. Fitur query blocker bertindak sebagai firewall SQL dengan mengintersep pernyataan berparameter. Fitur ini didukung untuk kluster AnalyticDB for MySQL yang menjalankan versi V3.1.4 atau lebih baru.
Fitur
Jika fitur optimasi lanjutan diaktifkan pada kluster, berbagai jenis pernyataan mungkin terpengaruh. Anda dapat menambahkan petunjuk ke pernyataan menggunakan persist plan, sehingga petunjuk tersebut berlaku untuk pernyataan dengan pola serupa. Pernyataan dengan pola serupa disebut pernyataan berparameter. Anda dapat melihat dan menghapus persist plan menggunakan tabel sistem.
Catatan
- Saat menambahkan petunjuk ke pernyataan menggunakan persist plan, pernyataan tersebut tidak dieksekusi.
- Dalam sebuah pola, tanda tanya (
?) digunakan untuk menggantikan konstanta, seperti konstanta dalam klausa WHERE atau LIMIT m,n dari pernyataan SELECT.
Sintaksis
- Parameterisasi pernyataan untuk menghasilkan pola dan nilai sign-nya:
PARAMETERIZE $sql - Tambahkan petunjuk persisten ke pola:
/*+petunjuk*/ PERSIST_PLAN $sql - Hapus petunjuk persisten dari pola:
DELETE_PLAN $sqlatauDELETE_PLAN_BY_SIGN $Sign - Periksa apakah petunjuk persisten dikonfigurasikan untuk pernyataan:
PERSIST_PLAN_CHECK $sqlSELECT * FROM INFORMATION_SCHEMA.KEPLER_PERSIST_PLAN_SUMMARY
- Kueri semua pola yang dikonfigurasikan dengan petunjuk persisten:
SELECT * FROM INFORMATION_SCHEMA.KEPLER_PERSIST_PLAN_SUMMARY
Skenario tipikal: Intersep kueri lambat yang memiliki pola yang sama
Gunakan sintaksis
/*+query_blocker=true*/ persist_plan + SQL untuk mengintersep kueri lambat dengan pola serupa. Contoh pernyataan:/*+query_blocker=true*/
PERSIST_PLAN
SELECT t1.c1
FROM t1
INNER JOIN t2 ON t1.c1 = t2.c1
WHERE t1.c2 < 9999;Contoh persist plan
- Parameterisasi Pernyataan untuk Menghasilkan Pola dan Nilai Sign-nyaParameterisasi pernyataan SELECT berikut untuk menghasilkan pola dan nilai sign-nya:
PARAMETERIZE SELECT t1.c1 FROM t1 INNER JOIN t2 ON t1.c1 = t2.c1 WHERE t1.c2 < 9999;Tabel berikut menggambarkan hasil eksekusi.Sign Pola 2506ed2c1f53ea59a1ef996a98a50411 SELECT t1.c1 FROM t1 INNER JOIN t2 ON t1.c1 = t2.c1 WHERE t1.c2 < ? - Tambahkan Petunjuk Persisten ke PolaEksekusi algoritma
nested loop joinpada pernyataan dengan pola serupa./*+nested_loop_join=true*/ PERSIST_PLAN SELECT t1.c1FROM t1 INNER JOIN t2 ON t1.c1 = t2.c1 WHERE t1.c2 < 9999; - Periksa Apakah Petunjuk Persisten Dikonfigurasikan untuk Pernyataan
PERSIST_PLAN_CHECK SELECT t1.c1 FROM t1 INNER JOIN t2 ON t1.c1 = t2.c1 WHERE t1.c2 < 9999;Tabel berikut menggambarkan hasil eksekusi.Sign Petunjuk hitApplied Pola 2506ed2c1f53ea59a1ef996a98a50411 nested_loop_join=true 12 SELECT t1.c1 FROM t1 INNER JOIN t2 ON t1.c1 = t2.c1 WHERE t1.c2 < ? Catatan- Saat pernyataan
PERSIST_PLAN_CHECK $sqldieksekusi di Data Management (DMS), hasil sebelumnya tidak dikembalikan setelah eksekusi berhasil. Untuk mendapatkan hasil sebelumnya, eksekusi pernyataan ini di klien MySQL Anda. - Dalam hasil sebelumnya, bidang hitApplied menunjukkan berapa kali pola diterapkan setelah persist plan dibuat. Jika persist plan diperbarui, bidang hitApplied dihitung ulang dari awal.
- Saat pernyataan
- Kueri Semua Pola yang Dikonfigurasikan dengan Petunjuk Persisten
SELECT * FROM INFORMATION_SCHEMA.KEPLER_PERSIST_PLAN_SUMMARY; - Hapus Petunjuk Persisten dari PolaAnalyticDB for MySQL memungkinkan Anda menghapus petunjuk persisten dari pola menggunakan salah satu metode berikut:
- Eksekusi pernyataan
DELETE_PLAN $sql.DELETE_PLAN SELECT t1.c1 FROM t1 INNER JOIN t2 ON t1.c1 = t2.c1 WHERE t1.c2 < 9999; - Eksekusi pernyataan
DELETE_PLAN_BY_SIGNberdasarkan nilai sign.DELETE_PLAN_BY_SIGN 2506ed2c1f53ea59a1ef996a98a50411;Catatan Anda dapat menggunakan salah satu metode berikut untuk menanyakan nilai sign dari pola:- Eksekusi pernyataan
PARAMETERIZE $sql. - Eksekusi pernyataan
SELECT * FROM INFORMATION_SCHEMA.KEPLER_PERSIST_PLAN_SUMMARY.
- Eksekusi pernyataan
- Eksekusi pernyataan