持続プラン機能は、パラメータ化されたSQL文でヒントを持続できます。 クエリブロッカー機能は、パラメーター化されたステートメントをインターセプトすることにより、SQLファイアウォールとして機能します。 これらの機能は、V3.1.4以降を実行するAnalyticDB for MySQLクラスターでサポートされています。
特徴
クラスターで高度な最適化機能が有効になっている場合、さまざまなステートメントが影響を受ける可能性があります。 永続プランを使用して、ステートメントにヒントを追加できます。 このように、ヒントは同じパターンを共有するステートメントで有効になります。 同じパターンを共有するステートメントは、パラメータ化ステートメントと呼ばれます。 システムテーブルを使用して、永続プランを表示および削除できます。
説明
- 永続プランを使用してステートメントにヒントを追加すると、ステートメントは実行されません。
- パターンでは、クエスチョンマーク (
?
) を使用して、SELECTステートメントのWHERE句やLIMIT m,n句の定数などの定数を置き換えます。
構文
- ステートメントをパラメータ化してパターンとその符号値を生成する:
Parameterize $sql
- パターンに永続的なヒントを追加する:
/* + hints */ PERSIST_PLAN $sql
- パターンから永続的なヒントを削除する:
DELETE_PLAN $sql
またはDELETE_PLAN_BY_SIGN $Sign
- ステートメントに永続ヒントが設定されているかどうかを確認します。
PERSIST_PLAN_CHECK $sql
SELECT * FROM INFORMATION_SCHEMA.KEPLER_PERSIST_PLAN_概要
- 永続的なヒントで構成されているすべてのパターンを照会する:
SELECT * FROM INFORMATION_SCHEMA.KEPLER_PERSIST_PLAN_SUMMARY
典型的なシナリオ: 同じパターンを共有する低速クエリのインターセプト
/* + query_blocker=true */ persist_plan + SQL
構文を使用して、同じパターンを共有する低速クエリをインターセプトします。 サンプル文: /* + query_blocker=true * /
PERSIST_PLAN
SELECT t1.c1
t1から
INNER JOIN t2 ON t1.c1 = t2.c1
どこt1.c2 < 9999;
持続計画の例
- ステートメントをパラメータ化してパターンとその符号値を生成次のSELECTステートメントをパラメータ化して、パターンとその符号値を生成します。
選択 t1.c1 から t1 INNER JOIN t2 ON t1.c1 = t2.c1 どこ t1.c2 < 9999;
実行結果を次の表に示します。サイン パターン 2506ed2c1f53ea59a1ef996a98a50411 選択t1.c1 FROM t1 INNER JOIN t2 ON t1.c1 = t2.c1 t1.c2 < ? - パターンへの永続的なヒントの追加同じパターンを共有するステートメントに対して、
ネストループ結合
アルゴリズムを実行します。/* + nested_loop_join=true * / PERSIST_PLAN SELECT t1.c1FROM t1 INNER JOIN t2 ON t1.c1 = t2.c1 どこt1.c2 < 9999;
- PERSIST_PLAN_CHECKステートメントに永続ヒントが設定されているかどうかを確認
SELECT t1.c1 t1から INNER JOIN t2 ON t1.c1 = t2.c1 どこt1.c2 < 9999;
実行結果を次の表に示します。サイン ヒント hitApplied パターン 2506ed2c1f53ea59a1ef996a98a50411 nested_loop_join=true 12 選択t1.c1 FROM t1 INNER JOIN t2 ON t1.c1 = t2.c1 t1.c2 < ? 説明PERSIST_PLAN_CHECK $sql
ステートメントがデータ管理 (DMS) で実行された場合、正常に実行された後、上記の結果は返されません。 上記の結果を取得するには、MySQLクライアントでこのステートメントを実行します。- 上記の結果では、hitAppliedフィールドは、持続プランが作成された後にパターンが適用される回数を示します。 持続的なプランが更新された場合、hitAppliedフィールドは最初からカウントされます。
- 永続的なヒントで構成されているすべてのパターンを照会
SELECT * FROM INFORMATION_SCHEMA.KEPLER_PERSIST_PLAN_SUMMARY;
- パターンから永続的なヒントを削除AnalyticDB for MySQLでは、次のいずれかの方法を使用して、パターンから永続的なヒントを削除できます。
DELETE_PLAN $sql
ステートメントを実行します。DELETE_PLAN SELECT t1.c1 t1から INNER JOIN t2 ON t1.c1 = t2.c1 どこt1.c2 < 9999;
- 符号値に基づいて
DELETE_PLAN_BY_SIGN
ステートメントを実行します。DELETE_PLAN_BY_SIGN 2506ed2c1f53ea59a1ef996a98a50411;
説明 次のいずれかの方法を使用して、パターンの符号値を照会できます。PARAMETERIZE $sql
ステートメントを実行します。SELECT * FROM INFORMATION_SCHEMA.KEPLER_PERSIST_PLAN_SUMMARY
ステートメントを実行します。