すべてのプロダクト
Search
ドキュメントセンター

PolarDB:Flashbackテーブル

最終更新日:Jun 28, 2024

このトピックでは、PolarDB for PostgreSQL のフラッシュバックテーブル機能について説明します。

前提条件

この機能は、PostgreSQL 11 (リビジョンバージョン1.1.22以降) のバージョンを実行するPolarDB for PostgreSQL クラスターでサポートされています。

説明

次のステートメントを実行して、PolarDB for PostgreSQL のリビジョンバージョンを照会できます。

show polar_version;

概要

Flashbackテーブル

フラッシュバックテーブル機能は、ページスナップショットをフラッシュバックログに定期的に保存し、トランザクション情報を高速復旧領域に保持します。 これにより、特定の時点のテーブルデータを新しいテーブルに復元できます。

構文

FLASHBACK TABLE
    [ schema. ]table
    TO TIMESTAMP expr;

パラメーター

パラメーター

Parameters

[ schema. ]table

フラッシュバックされるテーブルの名前。

expr

テーブルがフラッシュバックされる時刻。

  1. テスト用のデータを準備します。

    1. testテーブルを作成し、データを挿入します。

      CREATE TABLE test(id int);
      INSERT INTO test select * FROM generate_series(1, 10000);
    2. testテーブルの行の総数を照会します。

      SELECT count (1) FROM test;

      サンプル結果:

       count
      -------
       10000
      (1 row)
    3. id値を合計します。

      SELECT sum(id) FROM test;

      サンプル結果:

         sum
      ----------
       50005000
      (1 row)
  2. 10秒待ってから、testテーブルのデータを削除します。

    SELECT pg_sleep(10);
    DELETE FROM test;

    削除されたtestテーブルを照会します。

    SELECT * FROM test;

    サンプル結果:

     id
    ----
    (0 rows)
  3. testテーブルのデータを10秒前のデータにフラッシュバックします。

    FLASHBACK TABLE test TO TIMESTAMP now() - interval'10s';

    サンプル結果:

    NOTICE:  Flashback the relation test to new relation polar_flashback_65566, please check the data
    FLASHBACK TABLE
  4. フラッシュバック後にテーブルデータを照会します。

    フラッシュバック後のテーブルの合計行数を照会します。

    SELECT count (1) FROM polar_flashback_65566;

    サンプル結果:

     count
    -------
     10000
    (1 row)

    フラッシュバック後にid値を合計します。

    SELECT sum(id) FROM polar_flashback_65566;

    サンプル結果:

       sum
    ----------
     50005000
    (1 row)

使用法

フラッシュバックテーブル機能を有効にする前に、polar_enable_flashback_logパラメーターをONに設定してフラッシュバックロギング機能を有効にし、polar_enable_fast_recovery_areaパラメーターをONに設定して高速復旧エリア機能を有効にし、クラスターを再起動する必要があります。 また、ビジネス要件に基づいて他のパラメーターを変更する必要があります。 一度にパラメーターを変更し、オフピーク時にクラスターを再起動することを推奨します。 フラッシュバックテーブル機能を有効にすると、メモリとディスクの使用量が増加し、パフォーマンスが低下する可能性があります。 機能を使用する前に、ビジネスに対する機能の影響を徹底的に評価することをお勧めします。

メモリ使用量

フラッシュバックロギング機能を有効にすると、共有メモリの増加には以下が含まれます。

  • polar_flashback_log_buffers * 8 KB

  • polar_flashback_logindex_mem_sizeMB

  • polar_flashback_logindex_queue_buffers MB

高速リカバリ領域を有効にすると、共有メモリのサイズは約32 KB増加します。 パラメーターを変更する前に、現在のクラスターステータスを確認してください。

ディスク使用率

テーブルデータを特定の時点にフラッシュバックするには、フラッシュバックログとWALログ、およびこれらのログに対応するLogIndexファイルを保持する必要があり、その結果、追加のディスクスペースが必要になります。 理論的には、polar_fast_recovery_area_rotationの値が大きいほど、ディスクスペースが占有されます。 たとえば、polar_fast_recovery_area_rotation300に設定すると、5時間の履歴データが保存されます。

フラッシュバックロギング機能を有効にすると、フラッシュバックポイントが定期的に作成されます。 フラッシュバックポイントはチェックポイントの一種です。 チェックポイントがトリガーされると、polar_flashback_point_segmentsパラメーターとpolar_flashback_point_timeoutパラメーターがチェックされ、現在のチェックポイントがフラッシュバックポイントかどうかが判断されます。 次のパラメーターをこの方法で設定することを推奨します。

  • polar_flashback_point_segments値をmax_wal_size値の倍数に設定します。

  • polar_flashback_point_timeout値をcheckpoint_timeout値の倍数に設定します。

たとえば、5時間で20 GBのWALログが生成され、フラッシュバックログとWALログの比率が約1:20の場合、約1 GBのフラッシュバックログが生成されます。 フラッシュバックログとWALログの比率は、次の要因によって異なります。

  • ビジネスモデルでは、書き込み操作の数はフラッシュバックログの数に比例します。

  • polar_flashback_point_segmentsおよびpolar_flashback_point_timeoutパラメーター値が大きいほど、生成されるフラッシュバックログは少なくなります。

パフォーマンス低下

フラッシュバックログ機能では、フラッシュバックログを使用するためにさらに2つのバックグラウンドプロセスが必要です。 これは必然的にCPUオーバーヘッドを増加させる。 CPUオーバーヘッドを削減するには、polar_flashback_log_bgwrite_delayおよびpolar_flashback_log_insert_list_delayパラメーターを調整して、2つのバックグラウンドプロセスのアクティビティラウンド間のレイテンシを長く設定します。 しかし、これは性能を低下させる可能性がある。 2つのパラメーターのデフォルト値を使用することを推奨します。

フラッシュバックログ機能を有効にすると、フラッシュバックログの損失を防ぐために、ページのフラッシュの前にフラッシュバックログのフラッシュが行われます。 これは、性能低下を引き起こし得る。 ほとんどのシナリオでのパフォーマンス低下は5% 未満です。

テーブルがフラッシュバックされると、テーブルに関連するページが共有メモリプールにスワップインおよびスワップアウトされます。 これにより、他のデータベースのアクセスパフォーマンスにジッタが発生する可能性があります。

制限

フラッシュバックテーブル機能は、既存のテーブルのデータをpolar_flashback_Existing table OIDという名前の新しいテーブルに復元します。 FLASHBACK TABLEステートメントの実行後、次のNOTICEが表示されます。

  • flashback table test to timestamp now() - interval '1h';
    NOTICE:  Flashback the relation test to new relation polar_flashback_54986, please check the data
    FLASHBACK TABLE

    polar_flashback_54986テーブルは、フラッシュバックによって作成される一時的なテーブルです。 指定された時点にテーブルデータのみが復元されます。

  • フラッシュバックテーブル機能は、共通テーブルのみを復元できますが、次のデータベースオブジェクトは復元できません。

    • インデックス

    • トーストテーブル

    • 具体化されたビュー

    • パーティション分割されたテーブル

    • 子分割テーブル

    • システムテーブル

    • 外国のテーブル

    • 子トーストテーブルを含むテーブル

  • 指定した時刻から現在の時刻まで、次のDDLステートメントを実行したテーブルをフラッシュバックすることはできません。

    • DROP TABLE

    • ALTER TABLE SET WITH OIDS

    • ALTER TABLE SET WITHOUT OIDS

    • TRUNCATE TABLE

    • 列のデータ型を変更します。 変更前後の型は暗黙的に変換できず、USING句にはセキュリティで保護された強制変換用の他の値は含まれません。

    • テーブルをUNLOGGEDまたはLOGGEDに変更します。

    • IDENTITYとして列を追加します。

    • 限られたデータ型しか選択できない列を追加します。

    • デフォルト値の式にvolatile関数が含まれる列を追加します。

      説明

      PolarDB for PostgreSQL のドロップフラッシュバック機能を使用して、DROP TABLE操作をフラッシュバックできます。

提案

テーブルデータを誤って削除した場合は、監査ログから操作時間をすばやく検出し、フラッシュバックログを使用して操作前の時点にテーブルデータを復元することをお勧めします。 テーブルフラッシュバック中、排他的ロックがテーブル上に保持される。 したがって、クエリできるのはテーブル内のデータのみです。 テーブルがフラッシュバックされると、テーブルに関連するページが共有メモリプールにスワップインおよびスワップアウトされます。 これにより、他のデータベースのアクセスパフォーマンスにジッタが発生する可能性があります。 そのため、オフピーク時にフラッシュバック操作を実行することを推奨します。

フラッシュバック速度は、テーブルのサイズに関連しています。 テーブルサイズが大きい場合は、polar_workers_per_flashback_tableパラメーターの値を大きくして、並列フラッシュバックのワーカーの数を増やすことができます。 これにより、フラッシュバック動作の速度が向上する。

テーブルフラッシュバック操作が完了したら、テーブルのデータを照会し、NOTICE情報に基づいて元のテーブルとデータを比較できます。 フラッシュバック操作ではインデックスは作成されません。 クエリ要件に基づいてインデックスを作成できます。 2つのテーブルのデータの比較が完了した後、欠落しているデータを元のテーブルに送り返すことができます。

Parameters

パラメーター

説明

polar_enable_flashback_log

フラッシュバックログを有効にするかどうかを指定します。 デフォルト値:off 有効な値:

  • on

  • off

説明

このパラメータに対する変更は、SIGHUP信号が送信された後に有効になる。

polar_enable_fast_recovery_area

高速リカバリエリアを有効にするかどうかを指定します。 デフォルト値:off 有効な値:

  • on

  • off

説明

このパラメータに対する変更は、SIGHUP信号が送信された後に有効になる。

polar_flashback_log_keep_segments

フラッシュバックログに保持されているファイルの数。 有効値: 3 ~ 2147483647 デフォルト値: 8。

説明
  • フラッシュバックログファイルは再利用可能です。 各フラッシュバックログのサイズは256 MBです。

  • このパラメータに対する変更は、SIGHUP信号が送信された後に有効になる。

polar_fast_recovery_area_rotation

トランザクション情報を高速リカバリエリアに保持できる期間。 単位は分です。

有効な値: 1 ~ 14400 デフォルト値: 180

説明

このパラメータに対する変更は、SIGHUP信号が送信された後に有効になる。

polar_flashback_point_segments

2つのフラッシュバック時点間のWALログの最小数。 各WALログのサイズは1 GBです。

有効な値: 1 ~ 2147483647 デフォルト値: 16。

説明

このパラメータに対する変更は、SIGHUP信号が送信された後に有効になる。

polar_flashback_point_timeout

2つのフラッシュバック間の最小時間間隔。 単位は秒です。

有効な値: 1 ~ 86400 既定値:300

説明

このパラメータに対する変更は、SIGHUP信号が送信された後に有効になる。

polar_flashback_log_buffers

フラッシュバックログの共有メモリのサイズ。 (単位:KB)

有効値: 4 ~ 262144 デフォルト値:2048。

説明

このパラメーターの変更は、設定ファイルが変更され、クラスターが再起動された後に有効になります。

polar_flashback_logindex_mem_size

フラッシュバックログインデックスの共有メモリのサイズ。 単位:MB。

有効値: 3 ~ 1073741823 デフォルト値: 64。

説明

このパラメーターの変更は、設定ファイルが変更され、クラスターが再起動された後に有効になります。

polar_flashback_logindex_bloom_blocks

フラッシュバックログインデックスのBloomフィルターページの数。

有効値: 8 ~ 1073741823 デフォルト値: 512

説明

このパラメーターの変更は、設定ファイルが変更され、クラスターが再起動された後に有効になります。

polar_flashback_log_insert_locks

フラッシュバックログ挿入ロックの数。

有効な値: 1 ~ 2147483647 デフォルト値: 8。

説明

このパラメーターの変更は、設定ファイルが変更され、クラスターが再起動された後に有効になります。

polar_workers_per_flashback_table

並列テーブルフラッシュバックに含まれるテーブルの数。

有効値: 0~1024。 デフォルト値:5

説明
  • このパラメーターを0に設定すると、並列テーブルフラッシュバックは無効になります。

  • このパラメータの変更はすぐに有効になります。

polar_flashback_log_bgwrite_delay

bgwriterプロセスのアクティビティラウンド間のレイテンシ。 単位:ミリ秒。

有効な値: 1 ~ 10000 デフォルト値:100

説明

このパラメータに対する変更は、SIGHUP信号が送信された後に有効になる。

polar_flashback_log_flush_max_size

bgwriterプロセスがログをディスクにフラッシュするたびに許可されるログサイズ。 (単位:KB)

有効な値: 0 ~ 2097152 デフォルト値: 5120

説明
  • このパラメーターを0に設定すると、フラッシュバックログのサイズは制限されません。

  • このパラメータに対する変更は、SIGHUP信号が送信された後に有効になる。

polar_flashback_log_insert_list_delay

bginserterプロセスのアクティビティラウンド間のレイテンシ。 単位:ミリ秒。

有効な値: 1 ~ 10000 デフォルト値: 10

説明

このパラメータに対する変更は、SIGHUP信号が送信された後に有効になる。

polar_flashback_log_size_limit

フラッシュバックログの最大サイズ。 有効な値: 0 ~ 2147483647 デフォルト値: 20480 フラッシュバックログのサイズが指定された値を超えると、フラッシュバックログのリサイクルがトリガーされます。 値0は、フラッシュバックログのサイズが無制限であることを示します。