tencent cloud

フラッシュバッククエリー
最終更新日:2024-07-25 16:20:38
フラッシュバッククエリー
最終更新日: 2024-07-25 16:20:38

機能の説明

データベースの運用保守中に誤動作が発生することがあります、このような誤動作は、業務に重大な影響を及ぼす可能性があります。誤動作によって業務に影響が及んだ場合、一般的なリカバリ手段としては、ロールバックやクローン作成などがありますが、データの変更が少ない場合や、緊急の障害修復では、エラーが発生しやすく時間がかかり、また、データ量が多い場合にはリカバリ時間を把握できません。 TXSQLチームは、Innodbエンジン上でフラッシュバッククエリー機能を設計・実装しました。簡単なSQL文だけで誤動作前の履歴データを照会することができます。特定のSQL構文で特定の時点のデータを照会することで、大量のデータ照会と回復時間を節約し、誤動作後のデータを迅速に復元し、業務の迅速な再開を保証します。

サポートするバージョン

カーネルバージョン MySQL 5.7 20220715以降
カーネルバージョン MySQL 8.0 20220331以降
カーネルマイナーバージョンのアップデートについて、カーネルマイナーバージョンのアップデートをご参照ください。

ユースケース

フラッシュバッククエリー機能はデータベースの運用保守プロセスの誤動作後、履歴データを迅速にクエリーするために使用されます。 この機能を使用する場合は、次のいくつかの点に注意してください:
Innodb物理テーブルのみがサポートされます。viewやその他のエンジンはサポートされません。last_insert_id()など、実際の列が対応していない関数はサポートされません。
秒単位のフラッシュバッククエリーのみがサポートされます。100%の正確性は保証されていません。1秒以内に複数の変更があった場合、いずれかが問合せされる可能性があります。
フラッシュバッククエリーでは、プライマリキーのみがサポートされます(またはGEN_CLUST_INDEX)。
prepared statementおよびstored procedureでは使用できません。
DDLはサポートされていません。表をDDLする(例えば、truncate table。この場合はごみ箱からリカバリすることをお勧めします)と、フラッシュバッククエリーの結果が予期しない可能性があります。
同じ文内の同じテーブルに複数のフラッシュバッククエリー時間が指定されている場合、現在のクエリー時間から最も遠い時間が選択されます。
マスター/スレーブインスタンスには時間差があるため、フラッシュバッククエリーを同じ時間に指定すると、マスター/スレーブインスタンスで得られる結果が異なる場合があります。
フラッシュバッククエリーを有効にすると、undoログのクリーンアップが遅延し、メモリー使用量が増加します。特に業務アクセスがビジーなインスタンスについて、Innodb_backquery_windowの設定が過度に大きくなることは推奨されません(900~1800の範囲をお勧めします)。
データベースインスタンスが再起動またはcrashした場合、再起動またはcrash前の履歴情報を問い合せることはできません。指定した時間は、サポートされている範囲内でなければなりません(サポートされている範囲は、状態変数Innodb_backquery_up_timeとInnodb_backquery_low_timeを使用して確認でき、show status like'%backquery%'を実行します)。

利用説明

フラッシュバッククエリーでは新しいAS OF構文が提供されます。パラメータ設定でInnodb_backquery_enableパラメータをONに設定し、フラッシュバッククエリー機能をオンにして、特定の構文を使用して指定した時刻のデータを問合せします。構文は次のとおりです:
SELECT ... FROM <テーブル名>
AS OF TIMESTAMP <時間>;
指定時刻の問い合わせ例
MySQL [test]> create table t1(id int,c1 int) engine=innodb;
Query OK, 0 rows affected (0.06 sec)

MySQL [test]> insert into t1 values(1,1),(2,2),(3,3),(4,4);
Query OK, 4 rows affected (0.01 sec)
Records: 4 Duplicates: 0 Warnings: 0

MySQL [test]> select now();
+---------------------+
| now() |
+---------------------+
| 2022-02-17 16:01:01 |
+---------------------+
1 row in set (0.00 sec)

MySQL [test]> delete from t1 where id=4;
Query OK, 1 row affected (0.00 sec)

MySQL [test]> select * from t1;
+------+------+
| id | c1 |
+------+------+
| 1 | 1 |
| 2 | 2 |
| 3 | 3 |
+------+------+
3 rows in set (0.00 sec)

MySQL [test]> select * from t1 as of timestamp '2022-02-17 16:01:01';
+------+------+
| id | c1 |
+------+------+
| 1 | 1 |
| 2 | 2 |
| 3 | 3 |
| 4 | 4 |
+------+------+
4 rows in set (0.00 sec)
履歴データからのテーブル作成例
create table t3 select * from t1 as of timestamp '2022-02-17 16:01:01';
テーブルに履歴データを挿入する例
insert into t4 select * from t1 as of timestamp '2022-02-17 16:01:01';

パラメータの説明

フラッシュバッククエリー機能に設定可能なパラメータの説明を次の表に示します。
パラメータ名
パラメータ範囲
タイプ
デフォルト値
数値範囲
再起動が必要か
説明
Innodb_backquery_enable
グロバールパラメータ
Boolean
OFF
ON\\OFF
いいえ
フラッシュバッククエリー機能のオン・オフ。
Innodb_backquery_window
グロバールパラメータ
Integer
900
1 - 86400
いいえ
フラッシュバッククエリーをサポートする時間範囲(秒単位)。このパラメータの値が大きいほど、フラッシュバッククエリーでサポートされる履歴データの問合せ時間が長くなり、undo表領域が消費する記憶域が増加します。
Innodb_backquery_history_limit
グロバールパラメータ
Integer
8000000
1 - 9223372036854476000
いいえ
undoの履歴リンクテーブルの長さ制限。設定値を超えると、履歴リンクテーブルの長さが設定値を下回るまで、Innodb_backquery_windowのpurgeトリガが無視されます。
この記事はお役に立ちましたか?
営業担当者に お問い合わせ いただくか チケットを提出 してサポートを求めることができます。
はい
いいえ

フィードバック