オプティマイザー修正コントロール
製品が反復的に進化するにつれて、TiDB オプティマイザーの動作が変化し、より合理的な実行計画が生成されます。ただし、特定のシナリオでは、新しい動作により予期しない結果が生じる可能性があります。例えば:
- 一部の動作の影響は、特定のシナリオに依存します。ほとんどのシナリオに改善をもたらす変更は、他のシナリオに後退を引き起こす可能性があります。
- 場合によっては、動作の詳細の変化とその結果との関係が非常に複雑になることがあります。特定の動作を改善すると、全体的な退行が発生する可能性があります。
したがって、TiDB は、修正グループの値を設定することによって、TiDB オプティマイザーの動作をきめ細かく制御できるオプティマイザー修正コントロール機能を提供します。このドキュメントでは、Optimizer Fix Controls 機能とその使用方法について説明し、TiDB が現在 Optimizer Fix Controls に対してサポートしているすべての修正をリストします。
tidb_opt_fix_control
の概要
v7.1.0 以降、TiDB はオプティマイザーの動作をよりきめ細かい方法で制御するためのtidb_opt_fix_control
システム変数を提供します。
各修正は、特定の目的のために TiDB オプティマイザーの動作を調整するために使用される制御項目です。これは、動作変更の技術的な詳細を含む GitHub の問題に対応する番号で示されます。たとえば、修正44262
の場合、修正問題 44262で制御される内容を確認できます。
tidb_opt_fix_control
システム変数は、複数の修正をカンマ ( ,
) で区切って 1 つの値として受け入れます。形式は"<#issue1>:<value1>,<#issue2>:<value2>,...,<#issueN>:<valueN>"
で、 <#issueN>
は修正番号です。例えば:
SET SESSION tidb_opt_fix_control = '44262:ON,44389:ON';
オプティマイザー修正コントロールのリファレンス
44262
v7.1.1 の新機能
- デフォルト値:
OFF
- 可能な値:
ON
、OFF
- この変数は、 グローバル統計が欠落している場合に、パーティションテーブルにアクセスするために動的プルーニングモードの使用を許可するかどうかを制御します。
44389
v7.1.1 の新機能
- デフォルト値:
OFF
- 可能な値:
ON
、OFF
c = 10 and (a = 'xx' or (a = 'kk' and b = 1))
などのフィルタの場合、この変数はIndexRangeScan
に対してより包括的なスキャン範囲を構築するかどうかを制御します。
44823
v7.1.1 の新機能
- デフォルト値:
200
- 可能な値:
[0, 2147483647]
- メモリを節約するために、プラン キャッシュは、指定されたパラメータ数を超えるクエリをキャッシュしません。
- この変数は、パラメータの最大数のしきい値を制御します。
0
制限なしを意味します。
44855
v7.1.1 の新機能
- デフォルト値:
OFF
- 可能な値:
ON
、OFF
- 一部のシナリオでは、
IndexJoin
演算子のProbe
側にSelection
演算子が含まれる場合、TiDB は行数IndexScan
を大幅に過大評価します。これにより、IndexJoin
ではなく次善のクエリ プランが選択される可能性があります。 - この問題を軽減するために、TiDB は改善を導入しました。ただし、潜在的なクエリ プランのフォールバック リスクのため、この改善はデフォルトで無効になっています。
- この変数は、前述の改善を有効にするかどうかを制御します。