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

PolarDB:完全な述語プッシュダウン

最終更新日:May 29, 2024

大量のデータを含むクエリが実行されている場合、SQL層がストレージエンジン層からデータを読み取り、計算を実行するため、大量の計算リソースが消費されます。 クエリのパフォーマンスを向上させるために、PolarDB for MySQLは述語をストレージエンジン層にプッシュします。 このトピックでは、述語のプッシュダウン機能について説明します。

前提条件

PolarDB for MySQLクラスターのバージョンが8.0で、リビジョンバージョンは次の要件を満たしています。
  • 8.0.1.1.5以降
  • 8.0.2.2.0以降

クラスターバージョンを表示する方法の詳細については、「エンジンバージョンの照会」をご参照ください。

背景

MySQL Community Editionでは、インデックスの範囲条件を使用して、ストレージエンジン層によってスキャンされるデータの範囲を決定できます。 SQL層がストレージエンジン層からデータを取得した後、データは、範囲条件に基づいて再びフィルタリングされる。 このプロセスは不要です。 計算リソースを消費し、特定の計算がストレージエンジン層にプッシュダウンされるのを防ぎます。 この問題を解決するために、PolarDB for MySQLは、ストレージエンジン内のデータをスキャンするために条件が使用された後に範囲条件を削除する完全述語プッシュダウン機能を提供します。

制限事項

OFFSET値は512より大きくなければなりません。
説明 この制限を無効にするには、ignore_polar_optimizer_ruleパラメーターをONに設定します。 詳細については、「クラスターとノードパラメーターの設定」をご参照ください。
パラメーターレベル説明
ignore_polar_optimizer_ruleグローバルとセッションOFFSET値の制限を無効にするかどうかを指定します。 デフォルト値: OFF。 有効な値:
  • ON: 制限は無効です。
  • OFF: 制限は有効です。

完全な述語プッシュダウン機能を使用する

loose_optimizer_switchパラメーターのdetach_range_condition変数を使用して、完全な述語プッシュダウン機能を有効にします。 詳細については、「クラスターとノードパラメーターの設定」をご参照ください。
パラメーターレベル説明
loose_optimizer_switchグローバルとセッションPolarDBのクエリ最適化機能を有効にするかどうかを指定します。 LIMIT OFFSETプッシュダウン機能に関連する変数:
  • limit_offset_pushdown: LIMIT OFFSETプッシュダウン機能を有効にするかどうかを指定します。 デフォルト値: ON。 有効な値:
    • ON
    • オフ
  • detach_range_condition: 述語プッシュダウン機能を有効にするかどうかを指定します。 デフォルト値: ON。 有効な値:
    • ON
    • オフ

性能テスト

このパフォーマンステストでは、TPC-Hスキーマが使用されます。 完全述語プッシュダウン機能が無効になっているときに、EXPLAINステートメントを実行してQ2の実行計画を表示します。 この場合、Extraパラメーターに対して [Using where] が返されます。これは、範囲条件が保持されていることを示します。
set @ @ optimizer_switch='detach_range_condition=off ';
EXPLAIN SELECT * FROM lineitem WHERE l_orderkey > 10 AND l_orderkey < 60000000 LIMIT 10000000, 10\G
*************************** 1。 行 ***************************
           id: 1
  select_type: シンプル
        テーブル: lineitem
   パーティション: NULL
         タイプ: 範囲
possible_keys: PRIMARY、i_l_orderkey、i_l_orderkey_quantity
          キー: PRIMARY
      key_len: 4
          ref: NULL
         行: 29720232
     filtered: 100.00
        エクストラ: どこで
使用
ignore_polar_optimizer_ruleONに設定された後。 範囲条件を指定する述語は、ストレージエンジン内のデータをスキャンするために使用された後に削除されます。 この例では、TPC-HのQ5およびQ6が使用される。 完全述語プッシュダウン機能が有効になっている場合、EXPLAINステートメントを実行してQ5およびQ6の実行プランを表示します。 Using indexは、Extraパラメーターに返されます。
  • Q5
    @ @ ignore_polar_optimizer_rule=onに設定します。ラインアイテムからの選択カウント (*) WHERE l_suppkey > 10 AND l_suppkey < 50000\G
    *************************** 1。 行 ***************************
               id: 1
      select_type: シンプル
            テーブル: lineitem
       パーティション: NULL
             タイプ: 範囲
    possible_keys: i_l_suppkey_partkey,i_l_suppkey
              キー: i_l_suppkey
          key_len: 5
              ref: NULL
             行: 29720232
         filtered: 100.00
            エクストラ: インデックス
    の使用
  • Q6
    @ @ ignore_polar_optimizer_rule=onに設定します。l_receiptDATE > '1992-01-03 'AND l_receiptDATE < '1994-12-31'\Gがあるラインアイテムからの選択カウント (*) を説明します。*************************** 1。 行 ***************************
               id: 1
      select_type: シンプル
            テーブル: LINEITEM
       パーティション: NULL
             タイプ: 範囲
    possible_keys: i_l_receiptdate
              キー: i_l_receiptdate
          key_len: 4
              ref: NULL
             行: 29720232
         filtered: 100.00
            エクストラ: インデックス
    の使用

テスト結果

TPC-Hテストは10のスケールファクタで実行されます。 Q5およびQ6が使用される。 次の図は、完全述語プッシュダウン機能の有効化と無効化のパフォーマンスの違いを示しています。Predicate pushdown