このトピックでは、 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 | テーブルがフラッシュバックされる時刻。 |
例
テスト用のデータを準備します。
test
テーブルを作成し、データを挿入します。CREATE TABLEテスト (id int); INSERT INTO test select * FROM generate_series(1、10000);
test
テーブルの行の総数を照会します。SELECT count (1) FROM test;
サンプル結果:
カウント ------- 10000 (1行)
id
値を合計します。SELECT sum(id) FROMテスト;
サンプル結果:
合計 ---------- 50005000 (1行)
10秒待ってから、
test
テーブルのデータを削除します。SELECT pg_sleep(10); テストから削除します。
削除された
テスト
テーブルを照会します。SELECT * テストから;
サンプル結果:
id ---- (0行)
テスト
テーブルのデータを10秒前のデータにフラッシュバックします。フラッシュバックテーブルテストからタイムスタンプへnow() - interval'10s';
サンプル結果:
NOTICE: 関係テストを新しい関係polar_flashback_65566にフラッシュバックします。データを確認してください フラッシュバックテーブル
フラッシュバック後にテーブルデータを照会します。
フラッシュバック後のテーブルの合計行数を照会します。
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 kBpolar_flashback_logindex_mem_サイズ
MBpolar_flashback_logindex_queue_buffers
MB
高速リカバリ領域を有効にすると、共有メモリのサイズは約32 KB増加します。 パラメーターを変更する前に、現在のクラスターステータスを確認してください。
ディスク使用率
テーブルデータを指定された時点にフラッシュバックするには、指定された時点のフラッシュバックログとWALログ、およびこれらのログのLogIndexファイルを保持する必要があります。 これにより、より多くのディスクスペースが必要です。 理論的には、polar_fast_recovery_area_rotation
の値が大きいほど、占有されるディスク容量が大きくなります。 たとえば、polar_fast_recovery_area_rotation
を300
に設定すると、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 有効な値:
説明 このパラメータに対する変更は、 |
polar_enable_fast_recovery_area | 高速リカバリエリアを有効にするかどうかを指定します。 デフォルト値:off 有効な値:
説明 このパラメータに対する変更は、 |
polar_flashback_log_keep_segments | フラッシュバックログに保持されているファイルの数。 有効値: 3 ~ 2147483647 デフォルト値: 8。 説明
|
polar_fast_recovery_area_rotation | トランザクション情報を高速リカバリエリアに保持できる期間。 単位は分です。 有効な値: 1 ~ 14400 デフォルト値: 180 説明 このパラメータに対する変更は、 |
polar_flashback_point_segments | 2つのフラッシュバック時点間のWALログの最小数。 各WALログのサイズは1 GBです。 有効な値: 1 ~ 2147483647 デフォルト値: 16。 説明 このパラメータに対する変更は、 |
polar_flashback_point_timeout | 2つのフラッシュバック間の最小時間間隔。 単位は秒です。 有効な値: 1 ~ 86400 既定値:300 説明 このパラメータに対する変更は、 |
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 説明
|
polar_flashback_log_bgwrite_delay | フラッシュバックログのbgwriterプロセスの作業間隔。 単位:ミリ秒。 有効な値: 1 ~ 10000 デフォルト値:100 説明 このパラメータに対する変更は、 |
polar_flashback_log_flush_max_size | bgwriterプロセスがログをディスクにフラッシュするたびに許可されるログサイズ。 (単位:KB) 有効な値: 0 ~ 2097152 デフォルト値: 5120 説明
|
polar_flashback_log_insert_list_delay | フラッシュバックログのbginserterプロセスの作業間隔。 単位:ミリ秒。 有効な値: 1 ~ 10000 デフォルト値は 10 です。 説明 このパラメータに対する変更は、 |
polar_flashback_log_size_limit | フラッシュバックログの最大サイズ。 有効な値: 0 ~ 2147483647 デフォルト値: 20480 フラッシュバックログのサイズが指定された値を超えると、フラッシュバックログのリサイクルがトリガーされます。 値0は、フラッシュバックログのサイズが無制限であることを示します。 |