tidb_external_ts変数を使用して履歴データを読み取る

履歴データの読み取りをサポートするために、TiDB v6.4.0 ではシステム変数tidb_external_tsが導入されています。このドキュメントでは、このシステム変数を使用して履歴データを読み取る方法について、詳細な使用例を含めて説明します。

シナリオ

指定した時点からの履歴データの読み取りは、TiCDC などのデータ複製ツールに非常に役立ちます。データ複製ツールが特定の時点より前にデータの複製を完了した後、ダウンストリーム TiDB のtidb_external_tsシステム変数を設定して、その時点より前のデータを読み取ることができます。これにより、データ複製によるデータの不整合が防止されます。

機能説明

システム変数tidb_external_tsは、 tidb_enable_external_ts_readが有効な場合に読み取られる履歴データのタイムスタンプを指定します。

システム変数tidb_enable_external_ts_readは、現在のセッションまたはグローバルのどちらで履歴データを読み取るかを制御します。デフォルト値はOFFです。これは、履歴データの読み取り機能が無効になっていることを意味し、値tidb_external_tsは無視されます。 tidb_enable_external_ts_readがグローバルにONに設定されている場合、すべてのクエリはtidb_external_tsで指定された時間より前の履歴データを読み取ります。特定のセッションに対してのみtidb_enable_external_ts_readONに設定されている場合、そのセッションのクエリのみが履歴データを読み取ります。

tidb_enable_external_ts_readを有効にすると、TiDB は読み取り専用になります。すべての書き込みクエリはERROR 1836 (HY000): Running in read-only modeのようなエラーで失敗します。

使用例

このセクションでは、 tidb_external_ts変数を使用して履歴データを読み取る方法を例とともに説明します。

  1. テーブルを作成し、いくつかの行をテーブルに挿入します。

    CREATE TABLE t (c INT);
    
    Query OK, 0 rows affected (0.01 sec)
    
    INSERT INTO t VALUES (1), (2), (3);
    
    Query OK, 3 rows affected (0.00 sec)
    
  2. テーブル内のデータをビューします。

    SELECT * FROM t;
    
    +------+
    | c    |
    +------+
    |    1 |
    |    2 |
    |    3 |
    +------+
    3 rows in set (0.00 sec)
    
  3. tidb_external_ts@@tidb_current_tsを設定:

    START TRANSACTION;
    SET GLOBAL tidb_external_ts=@@tidb_current_ts;
    COMMIT;
    
  4. 新しい行を挿入し、挿入されたことを確認します。

    INSERT INTO t VALUES (4);
    
    Query OK, 1 row affected (0.001 sec)
    
    SELECT * FROM t;
    
    +------+
    | id   |
    +------+
    |    1 |
    |    2 |
    |    3 |
    |    4 |
    +------+
    4 rows in set (0.00 sec)
    
  5. tidb_enable_external_ts_readからONを設定してから、テーブルのデータを表示します。

    SET tidb_enable_external_ts_read=ON;
    SELECT * FROM t;
    
    +------+
    | c    |
    +------+
    |    1 |
    |    2 |
    |    3 |
    +------+
    3 rows in set (0.00 sec)
    

    新しい行が挿入される前にタイムスタンプにtidb_external_tsが設定されるため、 tidb_enable_external_ts_readが有効になった後、新しく挿入された行は返されません。

エコシステム
TiDB
TiKV
TiSpark
Chaos Mesh
© 2023 PingCAP. All Rights Reserved.