TiFlash後期マテリアライゼーション

ノート:

TiFlash後期実体化は高速スキャンモードでは有効になりません。

TiFlash遅延マテリアライゼーションは、OLAP シナリオでクエリを高速化する最適化方法です。 tidb_opt_enable_late_materializationシステム変数を使用して、 TiFlash遅延実体化を有効にするか無効にするかを制御できます。

  • 無効にすると、フィルター条件 ( WHERE句) を使用してSELECTステートメントを処理するために、 TiFlash はクエリに必要な列からすべてのデータを読み取り、クエリ条件に基づいてデータをフィルターして集計します。
  • これを有効にすると、 TiFlash はフィルター条件の一部を TableScan オペレーターにプッシュダウンすることをサポートします。つまり、 TiFlash は、 TableScan オペレーターにプッシュダウンされたフィルター条件に関連する列データを最初にスキャンし、条件を満たす行をフィルター処理してから、これらの行の他の列データをスキャンしてさらなる計算を行うことで、IO スキャンとデータ処理の計算。

OLAP シナリオでの特定のクエリのパフォーマンスを向上させるために、v7.1.0 以降、 TiFlash遅延マテリアライゼーション機能がデフォルトで有効になっています。 TiDB オプティマイザーは、統計とフィルター条件に基づいてどのフィルター条件を下げるかを決定し、高い濾過率を持つフィルター条件を優先的に下げることができます。詳細なアルゴリズムについては、 RFC文書を参照してください。

例えば:

EXPLAIN SELECT a, b, c FROM t1 WHERE a < 1;
+-------------------------+----------+--------------+---------------+-------------------------------------------------------+ | id | estRows | task | access object | operator info | +-------------------------+----------+--------------+---------------+-------------------------------------------------------+ | TableReader_12 | 12288.00 | root | | MppVersion: 1, data:ExchangeSender_11 | | └─ExchangeSender_11 | 12288.00 | mpp[tiflash] | | ExchangeType: PassThrough | | └─TableFullScan_9 | 12288.00 | mpp[tiflash] | table:t1 | pushed down filter:lt(test.t1.a, 1), keep order:false | +-------------------------+----------+--------------+---------------+-------------------------------------------------------+

この例では、フィルター条件a < 1が TableScan オペレーターにプッシュダウンされます。 TiFlash は、まず列aからすべてのデータを読み取り、次にa < 1条件を満たす行をフィルターします。次に、 TiFlash はこれらのフィルタリングされた行から列bと列cを読み取ります。

TiFlash遅延マテリアライゼーションを有効または無効にする

デフォルトでは、 tidb_opt_enable_late_materializationシステム変数はセッション レベルとグローバル レベルの両方でONです。これは、 TiFlash遅延マテリアライゼーション機能が有効であることを意味します。次のステートメントを使用すると、対応する変数情報を表示できます。

SHOW VARIABLES LIKE 'tidb_opt_enable_late_materialization';
+--------------------------------------+-------+ | Variable_name | Value | +--------------------------------------+-------+ | tidb_opt_enable_late_materialization | ON | +--------------------------------------+-------+
SHOW GLOBAL VARIABLES LIKE 'tidb_opt_enable_late_materialization';
+--------------------------------------+-------+ | Variable_name | Value | +--------------------------------------+-------+ | tidb_opt_enable_late_materialization | ON | +--------------------------------------+-------+

tidb_opt_enable_late_materialization変数はセッション レベルまたはグローバル レベルで変更できます。

  • 現在のセッションでTiFlash の遅延実体化を無効にするには、次のステートメントを使用します。

    SET SESSION tidb_opt_enable_late_materialization=OFF;
  • TiFlash の遅延実体化をグローバル レベルで無効にするには、次のステートメントを使用します。

    SET GLOBAL tidb_opt_enable_late_materialization=OFF;

    この設定後、新しいセッションのセッション レベルとグローバル レベルの両方でtidb_opt_enable_late_materialization変数がデフォルトで有効になります。

TiFlash の遅延実体化を有効にするには、次のステートメントを使用します。

SET SESSION tidb_opt_enable_late_materialization=ON;
SET GLOBAL tidb_opt_enable_late_materialization=ON;

実装メカニズム

フィルター条件が TableScan オペレーターにプッシュダウンされる場合、TableScan オペレーターの実行プロセスには主に次のステップが含まれます。

  1. 3 つの列を読み取り<handle, del_mark, version> 、マルチバージョン同時実行制御 (MVCC) フィルター処理を実行して、MVCC ビットマップを生成します。
  2. フィルタ条件に関連する列を読み込み、条件を満たす行をフィルタリングして、フィルタビットマップを生成します。
  3. MVCC ビットマップとフィルター ビットマップの間でAND操作を実行して、最終ビットマップを生成します。
  4. 最終ビットマップに従って、残りの列の対応する行を読み取ります。
  5. 手順2と手順4で読み取ったデータを結合し、結果を返します。

このページは役に立ちましたか?