元ドキュメント: フラッシュバック読み取りとスタンバイ読み取り
フラッシュバッククエリとスタンバイリード
概要
TDSQL Boundless は、履歴バージョンのデータを読み取るための 2 つの機能を提供します。
- フラッシュバッククエリ: 過去の特定時点を指定してデータを取得する機能です。誤操作(意図しない
UPDATEやDELETE等)の前のデータを迅速に復元できます。ステートメントレベルのフラッシュバッククエリをサポートします。 - スタンバイ読み取り(Stale Read): 読み取りリクエストを Follower ノードに転送する機能です。秒単位のデータリアルタイム性を犠牲にして Leader ノードの読み取り負荷を軽減し、リソース使用率とスループットを向上させます。
対応バージョン
| 機能 | 必要バージョン |
|---|---|
| フラッシュバッククエリ | v17.0.0 以上 |
| スタンバイ読み取り(Stale Read) | v20.0.0 以上 |
制限事項
フラッシュバッククエリ
- ストレージエンジン: RocksDB エンジンの物理テーブルのみサポート(ビューや他のエンジンは非対応)
- 時間指定: Hybrid Logical Clock(GTS)または秒単位のタイムスタンプに対応。未来の時間は指定不可
- 操作: ロックなし読み取り専用クエリ(autocommit)のみサポート。
SELECT FOR UPDATE、INSERT...SELECT、明示的トランザクション(BEGIN; SELECT...)は非対応 - DDL: DDL 操作は非対応。テーブル構造が変更された場合はごみ箱からの復旧が必要
- データ範囲: Global Earliest Snapshot(GES)より前のデータは取得不可
スタンバイ読み取り
- ステートメントレベル、トランザクションレベル、セッションレベルの 3 段階で設定可能
- 要件に応じてレプリカのロール(Leader / Follower)を選択可能
使用方法
前提条件
以下のコマンドで機能を有効化します。
sql
SET PERSIST tdsql_enable_stale_read = ON;フラッシュバッククエリ
AS OF 句を使用してスナップショット時点を指定します。
sql
SELECT ... FROM <table_name> [AS OF {TIMESTAMP timestamp_option | GTS gts_option}]タイムスタンプオプション:
- 時間リテラル:
'2023-09-05 12:00:00' - 関数:
NOW() - ユーザー変数
- 算術式
GTS オプション:
- 整数リテラルまたは整数に評価される式(例:
29610460101738510)
利用例:
sql
-- 現在のタイムスタンプを記録
SET @time0 = NOW();
-- データを更新
UPDATE t1 SET col1 = 'new_value' WHERE id = 1;
-- 更新前のデータを取得
SELECT * FROM t1 AS OF TIMESTAMP @time0;スタンバイ読み取りの設定
読み取りノードの設定:
sql
-- 0: Leader, 1: Follower
SET PERSIST tdsql_stale_read_role = 1;セッション/トランザクションレベルの設定:
sql
-- 10 秒前のデータを読み取る
SET tdsql_read_staleness_t = '-10';設定パラメータ
| パラメータ名 | スコープ | デフォルト | 説明 |
|---|---|---|---|
tdsql_enable_stale_read | GLOBAL | ON | フラッシュバッククエリ機能のスイッチ |
advance-global-earliest-snapshot-delay | GLOBAL | 10(秒) | クエリ可能な時間範囲を制御。値を大きくすると過去のデータをより長期間取得可能だが、ストレージ使用量とレイテンシが増加する可能性あり |
tdsql_stale_read_role | GLOBAL | 0 | ルーティングアクセス先レプリカを設定(0 = Leader、1 = Follower) |
tdsql_read_staleness_t | SESSION | ''(空) | Stale Read のデータ鮮度時間を設定(例: '-3' で 3 秒前のデータを読み取り) |
詳細なパラメータ説明や追加の利用例については元ドキュメントをご参照ください。