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

AnalyticDB:計画とクエリブロッカーの持続

最終更新日:Jun 12, 2024

持続プラン機能は、パラメータ化された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パターン
    2506ed2c1f53ea59a1ef996a98a50411nested_loop_join=true12選択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ステートメントを実行します。