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

PolarDB:Flashbackテーブル

最終更新日:Jun 05, 2024

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

前提条件

次の PolarDB for PostgreSQL (Oracle互換) バージョンがサポートされています。

PostgreSQL 11 (バージョン1.1.22以降)

説明

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

ショーpolar_version;

概要

Flashbackテーブル

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

構文

フラッシュバックテーブル
    [スキーマ] 。 ] テーブル
    TIMESTAMP exprへ; 

パラメーター

パラメーター

説明

[スキーマ] 。 ] テーブル

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

expr

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

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

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

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

      SELECT count (1) FROM test;

      サンプル結果:

      カウント
      -------
       10000
      (1行) 
    3. id値を合計します。

      SELECT sum(id) FROMテスト;

      サンプル結果:

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

    SELECT pg_sleep(10);
    テストから削除します。

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

    SELECT * テストから;

    サンプル結果:

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

    フラッシュバックテーブルテストからタイムスタンプへnow() - interval'10s';

    サンプル結果:

    NOTICE: 関係テストを新しい関係polar_flashback_65566にフラッシュバックします。データを確認してください
    フラッシュバックテーブル 
  4. フラッシュバック後にテーブルデータを照会します。

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

    SELECT count (1) FROM polar_flashback_65566;

    サンプル結果:

    カウント
    -------
     10000
    (1行) 

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

    SELECT sum(id) FROM polar_flashback_65566;

    サンプル結果:

    合計
    ----------
     50005000
    (1行) 

使用法

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

メモリ使用量

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

  • polar_flashback_log_buffers * 8 kB

  • polar_flashback_logindex_mem_サイズMB

  • 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オーバーヘッドを増加させる。 polar_flashback_log_bgwrite_delayおよびpolar_flashback_log_insert_list_delayパラメーターを調整して、2つのバックグラウンドプロセスの作業間隔を長く設定し、CPUオーバーヘッドを減らすことができます。 しかし、これは性能を低下させる可能性がある。 2つのパラメーターのデフォルト値を使用することを推奨します。

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

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

制限

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

  • フラッシュバックテーブルテストを今すぐタイムスタンプする () -間隔 '1h';
    注意: 新しい関係polar_flashback_54986への関係テストをフラッシュバックして下さい、データを点検して下さい
    フラッシュバックテーブル 

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

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

    • インデックス

    • トーストテーブル

    • 具体化されたビュー

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

    • 子分割テーブル

    • システムテーブル

    • 外国のテーブル

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

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

    • ドロップテーブル

    • ALTERテーブルセットとOIDS

    • 子供なしのALTER TABLE SET

    • TRUNCATEテーブル

    • 列のデータ型を変更します。 変更前後の型は暗黙的に変換できず、セキュアな強制変換の値を含まないUSING句は使用されません。

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

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

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

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

      説明

      PolarDB for PostgreSQL (Oracle互換) のフラッシュバック削除機能を使用して、DROP TABLEフラッシュバックを削除できます。

提案

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

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

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

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は、フラッシュバックログのサイズが無制限であることを示します。