すべてのプロダクト
Search
ドキュメントセンター

AnalyticDB:Persist Plan と Query-Blocker

最終更新日:Mar 28, 2026

Persist plan と Query-Blocker を使用すると、AnalyticDB for MySQL がパラメータ化された SQL 文を実行する方法を直接制御できます。Persist plan を使用して、ステートメントパターンに特定のオプティマイザヒントを固定し、Query-Blocker を使用して、同じパターンに一致する文をインターセプトしてブロックします。これは SQL ファイアウォールとして機能します。これらの機能は両方とも V3.1.4 以降が必要です。

仕組み

AnalyticDB for MySQL は、WHERELIMIT などの句の定数を疑問符 (?) に置き換えることで、文をパラメータ化し、同じ構造を共有する文を識別します。パターンと呼ばれる各一意の構造は、そのパターンのハッシュ識別子であるサイン値を取得します。

Persist plan は、オプティマイザヒントをパターンにアタッチします。パターンに一致するすべての文は、元の SQL を変更することなく、それらのヒントが適用されて実行されます。

Query-Blocker も同様に機能しますが、実行をチューニングする代わりに、パターンに一致するすべての文を拒否します。

高度な最適化機能がクラスターで有効になっている場合、広範囲の文が影響を受ける可能性があります。Persist plan を使用して、同じパターンを共有する文にどのヒントを適用するかを制御できます。
PERSIST_PLAN または /*+query_blocker=true*/ PERSIST_PLAN を実行しても、ターゲット SQL ステートメントは実行されません。ヒント構成のみが保存されます。

各機能の利用シーン

状況機能
オプティマイザーが類似のクエリのグループに対して最適ではない実行計画を選択している場合Persist plan
類似のクエリのグループがパフォーマンスの問題を引き起こしており、直ちに停止する必要がある場合Query-Blocker

前提条件

開始する前に、以下があることを確認してください。

  • V3.1.4 以降を実行している AnalyticDB for MySQL クラスター

  • MySQL クライアントへのアクセス (PERSIST_PLAN_CHECK に必要 — Data Management (DMS) はこのコマンドの結果を返しません)

構文リファレンス

操作構文
文のパターンとサイン値を生成PARAMETERIZE $sql
パターンにヒントをアタッチ/*+hints*/ PERSIST_PLAN $sql
パターンに一致するすべての文をブロック/*+query_blocker=true*/ PERSIST_PLAN $sql
文にヒントが構成されているか確認PERSIST_PLAN_CHECK $sql
ヒントを持つすべてのパターンを一覧表示SELECT * FROM INFORMATION_SCHEMA.KEPLER_PERSIST_PLAN_SUMMARY
SQL ステートメントでヒントを削除DELETE_PLAN $sql
サイン値でヒントを削除DELETE_PLAN_BY_SIGN $Sign

Persist plan の例

パターンとサイン値の生成

文で PARAMETERIZE を実行して、AnalyticDB for MySQL がそれをどのように正規化し、どのようなサイン値を取得するかを確認します。

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

結果:

サインパターン
2506ed2c1f53ea59a1ef996a98a50411SELECT t1.c1 FROM t1 INNER JOIN t2 ON t1.c1 = t2.c1 WHERE t1.c2 < ?

サイン値は、このパターンを一意に識別します。これを使用して、フル SQL を再指定することなく Persist plan を削除できます。

パターンにヒントをアタッチ

パターンに一致するすべての文に nested_loop_join アルゴリズムを適用するには:

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

パターンに一致する文をブロック

パターンに一致するすべての文をインターセプトするには:

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

Persist plan の削除

2つのメソッドが利用可能です。

SQL ステートメントによる:

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

サイン値による:

DELETE_PLAN_BY_SIGN 2506ed2c1f53ea59a1ef996a98a50411;

パターンのサイン値を取得するには、PARAMETERIZE $sql を実行するか、INFORMATION_SCHEMA.KEPLER_PERSIST_PLAN_SUMMARY をクエリします。

Persist plan の検証と監視

特定の文のヒントを確認

PERSIST_PLAN_CHECK を実行して、Persist plan が構成されていることを確認し、適用された回数を確認します。

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

結果:

サインヒントhitAppliedパターン
2506ed2c1f53ea59a1ef996a98a50411nested_loop_join=true12SELECT t1.c1 FROM t1 INNER JOIN t2 ON t1.c1 = t2.c1 WHERE t1.c2 < ?

フィールドの説明:

フィールド説明
Signパターンのハッシュ識別子
Hintパターンに現在設定されているヒントワード
hitApplied永続化プランが作成または最終更新されてからパターンが一致した回数。更新のたびに 0 にリセットされます。
Pattern文のパラメーター化された形式。定数は ?
重要

Data Management (DMS) で実行した場合、PERSIST_PLAN_CHECK は結果を返しません。出力を確認するには、MySQL クライアントから実行してください。

構成されているすべてのパターンを一覧表示

SELECT * FROM INFORMATION_SCHEMA.KEPLER_PERSIST_PLAN_SUMMARY;

このクエリは、現在 Persist plan が構成されているすべてのパターンを、それらのヒントとサイン値とともに返します。