tencent cloud

フィードバック

フラッシュバッククエリー

最終更新日:2023-02-22 16:13:27

    機能の説明

    データベースの運用保守中に誤動作が発生することがあります、このような誤動作は、業務に重大な影響を及ぼす可能性があります。誤動作によって業務に影響が及んだ場合、一般的なリカバリ手段としては、ロールバックやクローン作成などがありますが、データの変更が少ない場合や、緊急の障害修復では、エラーが発生しやすく時間がかかり、また、データ量が多い場合にはリカバリ時間を把握できません。
    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トリガが無視されます。
    お問い合わせ

    カスタマーサービスをご提供できるため、ぜひお気軽にお問い合わせくださいませ。

    テクニカルサポート

    さらにサポートが必要な場合は、サポートチケットを送信して弊社サポートチームにお問い合わせください。24時間365日のサポートをご提供します。

    電話サポート(24 時間365日対応)