このトピックでは、PolarDB for PostgreSQL のフラッシュバックテーブル機能について説明します。
前提条件
この機能は、次のバージョンを実行するPolarDB for PostgreSQL クラスターでサポートされています。
PostgreSQL 11 (リビジョンバージョン1.1.22以降)
次のステートメントを実行して、PolarDB for PostgreSQL のリビジョンバージョンを照会できます。
SHOW polar_version;概要
Flashbackテーブル
フラッシュバックテーブル機能は、ページスナップショットをフラッシュバックログに定期的に保存し、トランザクション情報を高速復旧領域に保持します。 これにより、特定の時点のテーブルデータを新しいテーブルに復元できます。
構文
FLASHBACK TABLE
[ schema. ]table
TO TIMESTAMP expr;パラメーター
パラメーター | Parameters |
[ schema. ]table | フラッシュバックされるテーブルの名前。 |
expr | テーブルがフラッシュバックされる時刻。 |
例
テスト用のデータを準備します。
testテーブルを作成し、データを挿入します。CREATE TABLE test(id int); INSERT INTO test select * FROM generate_series(1, 10000);testテーブルの行の総数を照会します。SELECT count(1) FROM test;サンプル結果:
count ------- 10000 (1 row)id値を合計します。SELECT sum(id) FROM test;サンプル結果:
sum ---------- 50005000 (1 row)
10秒待ってから、
testテーブルのデータを削除します。SELECT pg_sleep(10); DELETE FROM test;削除された
テストテーブルを照会します。SELECT * FROM test;サンプル結果:
id ---- (0 rows)テストテーブルのデータを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フラッシュバック後にテーブルデータを照会します。
フラッシュバック後のテーブルの合計行数を照会します。
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 KBpolar_flashback_logindex_mem_サイズMBpolar_flashback_logindex_queue_buffersMB
高速リカバリ領域を有効にすると、共有メモリのサイズは約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オーバーヘッドを増加させる。 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 TABLEpolar_flashback_54986テーブルは、フラッシュバックによって作成される一時的なテーブルです。 指定された時点にテーブルデータのみが復元されます。フラッシュバックテーブル機能は、共通テーブルのみを復元できますが、次のデータベースオブジェクトは復元できません。
インデックス
トーストテーブル
具体化されたビュー
パーティション分割されたテーブル
子分割テーブル
システムテーブル
外国のテーブル
子トーストテーブルを含むテーブル
指定した時刻から現在の時刻まで、次のDDLステートメントを実行したテーブルをフラッシュバックすることはできません。
ドロップテーブルALTERテーブルセットとOIDS子供なしのALTER TABLE SETTRUNCATEテーブル列のデータ型を変更します。 変更前後の型は暗黙的に変換できず、
USING句にはセキュリティで保護された強制変換用の他の値は含まれません。テーブルを
UNLOGGEDまたはLOGGEDに変更します。IDENTITYとして列を追加します。限られたデータ型しか選択できない列を追加します。
デフォルト値の式にvolatile関数が含まれる列を追加します。
説明PolarDB for PostgreSQL のドロップフラッシュバック機能を使用して、
drop TABLE操作をフラッシュバックできます。
提案
テーブルデータを誤って削除した場合は、監査ログから操作時間をすばやく検出し、フラッシュバックログを使用して操作前の時点にテーブルデータを復元することをお勧めします。 テーブルフラッシュバック中、排他的ロックがテーブル上に保持される。 したがって、クエリできるのはテーブル内のデータのみです。 テーブルがフラッシュバックされると、テーブルに関連するページが共有メモリプールにスワップインおよびスワップアウトされます。 これにより、他のデータベースのアクセスパフォーマンスにジッタが発生する可能性があります。 そのため、オフピーク時にフラッシュバック操作を実行することを推奨します。
フラッシュバック速度は、テーブルのサイズに関連しています。 テーブルサイズが大きい場合は、polar_workers_per_flashback_tableパラメーターの値を大きくして、並列フラッシュバックのワーカーの数を増やすことができます。 これにより、フラッシュバック動作の速度が向上する。
テーブルフラッシュバック操作が完了したら、テーブルのデータを照会し、NOTICE情報に基づいて元のテーブルとデータを比較できます。 フラッシュバック操作ではインデックスは作成されません。 クエリ要件に基づいてインデックスを作成できます。 2つのテーブルのデータの比較が完了した後、欠落しているデータを元のテーブルに送り返すことができます。
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は、フラッシュバックログのサイズが無制限であることを示します。 |