大量のデータを含むクエリが実行されている場合、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。 有効な値:
|
完全な述語プッシュダウン機能を使用する
loose_optimizer_switchパラメーターの
detach_range_condition
変数を使用して、完全な述語プッシュダウン機能を有効にします。 詳細については、「クラスターとノードパラメーターの設定」をご参照ください。 パラメーター | レベル | 説明 |
loose_optimizer_switch | グローバルとセッション | PolarDBのクエリ最適化機能を有効にするかどうかを指定します。 LIMIT OFFSETプッシュダウン機能に関連する変数:
|
性能テスト
このパフォーマンステストでは、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_rule
がON
に設定された後。 範囲条件を指定する述語は、ストレージエンジン内のデータをスキャンするために使用された後に削除されます。 この例では、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が使用される。 次の図は、完全述語プッシュダウン機能の有効化と無効化のパフォーマンスの違いを示しています。