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
は無視されます。7 tidb_enable_external_ts_read
グローバルにON
に設定すると、すべてのクエリはtidb_external_ts
で指定された時刻より前に履歴データを読み取ります。13 tidb_enable_external_ts_read
特定のセッションのみON
に設定すると、そのセッションのクエリのみが履歴データを読み取ります。
tidb_enable_external_ts_read
有効にすると、TiDB は読み取り専用になります。すべての書き込みクエリはERROR 1836 (HY000): Running in read-only mode
ようなエラーで失敗します。
使用例
このセクションでは、 tidb_external_ts
変数を使用して履歴データを読み取る方法を例とともに説明します。
テーブルを作成し、テーブルにいくつかの行を挿入します。
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)表内のデータをビュー。
SELECT * FROM t;+------+ | c | +------+ | 1 | | 2 | | 3 | +------+ 3 rows in set (0.00 sec)セット
tidb_external_ts
~@@tidb_current_ts
:START TRANSACTION; SET GLOBAL tidb_external_ts=@@tidb_current_ts; COMMIT;新しい行を挿入し、挿入されたことを確認します。
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)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
有効になった後は新しく挿入された行は返されません。