全部产品
Search
文档中心

AnalyticDB:Persist plan dan query blocker

更新时间:Jun 26, 2025

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 $sql atau DELETE_PLAN_BY_SIGN $Sign
  • Periksa apakah petunjuk persisten dikonfigurasikan untuk pernyataan:
    • PERSIST_PLAN_CHECK $sql
    • SELECT * 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-nya
    Parameterisasi 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.
    SignPola
    2506ed2c1f53ea59a1ef996a98a50411SELECT t1.c1 FROM t1 INNER JOIN t2 ON t1.c1 = t2.c1 WHERE t1.c2 < ?
  • Tambahkan Petunjuk Persisten ke Pola
    Eksekusi algoritma nested loop join pada 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.
    SignPetunjukhitAppliedPola
    2506ed2c1f53ea59a1ef996a98a50411nested_loop_join=true12SELECT t1.c1 FROM t1 INNER JOIN t2 ON t1.c1 = t2.c1 WHERE t1.c2 < ?
    Catatan
    • Saat pernyataan PERSIST_PLAN_CHECK $sql dieksekusi 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.
  • Kueri Semua Pola yang Dikonfigurasikan dengan Petunjuk Persisten
    SELECT * FROM INFORMATION_SCHEMA.KEPLER_PERSIST_PLAN_SUMMARY;
  • Hapus Petunjuk Persisten dari Pola
    AnalyticDB 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_SIGN berdasarkan 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.