日本熟妇hd丰满老熟妇,中文字幕一区二区三区在线不卡 ,亚洲成片在线观看,免费女同在线一区二区

本文介紹了PolarDB PostgreSQL版的閃回表功能。

前提條件

支持的PolarDB PostgreSQL版的版本如下:

PostgreSQL 11(內核小版本1.1.22及以上)

說明

您可通過如下語句查看PolarDB PostgreSQL版的內核小版本的版本號:

show polar_version;

簡介

閃回表

閃回表 (Flashback Table) 功能通過定期保留數據頁面快照到閃回日志中,保留事務信息到快速恢復區中,支持用戶將某個時刻的表數據恢復到一張新的表中。

語法

FLASHBACK TABLE
    [ schema. ]table
    TO TIMESTAMP expr;

語法參數說明:

參數名稱

參數說明

[ 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. 閃回表test10秒之前的數據。

    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_logpolar_enable_fast_recovery_area參數并重啟。其他的參數也需要按照需求來修改,建議一次性修改完成并在業務低峰期重啟。打開閃回表功能將會增大內存、磁盤的占用量,并帶來一定的性能損失,請謹慎評估后再使用。

內存占用

打開閃回日志功能需要增加的共享內存大小為以下三項之和:

  • polar_flashback_log_buffers* 8 kB

  • polar_flashback_logindex_mem_sizeMB

  • polar_flashback_logindex_queue_buffersMB

打開快速恢復區需要增加大約32 KB的共享內存大小,請評估當前集群狀態后再調整參數。

磁盤占用

為了保證能夠閃回到一定時間之前,需要保留該段時間的閃回日志和WAL日志,以及兩者的LogIndex文件,這會增加磁盤空間的占用。理論上polar_fast_recovery_area_rotation設置得越大,磁盤占用越多。例如,polar_fast_recovery_area_rotation設置為300,則將會保存5個小時的歷史數據。

打開閃回日志之后,會定期去創建閃回點(Flashback Point)。閃回點是檢查點的一種,當觸發檢查點后會檢查polar_flashback_point_segmentspolar_flashback_point_timeout參數來判斷當前檢查點是否為閃回點。所以建議設置以下參數值:

  • 設置polar_flashback_point_segmentsmax_wal_size的倍數。

  • 設置polar_flashback_point_timeoutcheckpoint_timeout的倍數。

例如,5個小時共產生20 GB的WAL日志,閃回日志與WAL日志的比例大約是1:20,那么大約會產生1 GB的閃回日志。閃回日志和WAL日志的比例大小和以下兩個因素有關:

  • 業務模型中,寫業務越多,閃回日志越多。

  • polar_flashback_point_segments、polar_flashback_point_timeout參數設定越大,閃回日志越少。

性能影響

閃回日志功能增加了兩個后臺進程來消費閃回日志,這勢必會增大CPU的開銷??梢酝ㄟ^調整polar_flashback_log_bgwrite_delaypolar_flashback_log_insert_list_delay參數,使得兩個后臺進程工作間隔周期更長,從而減少CPU消耗。但是這可能會造成一定性能的下降,建議使用默認值即可。

由于閃回日志功能需要在該頁面刷臟之前,先刷對應的閃回日志,來保證不丟失閃回日志,所以可能會造成一定的性能下降。目前測試在大多數場景下性能下降不超過5%。

在表閃回的過程中,目標表涉及到的頁面在共享內存池中換入換出,可能會造成其他數據庫訪問操作的性能抖動。

使用限制

目前閃回表功能會恢復目標表的數據到一個新表中,表名為polar_flashback_目標表 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為閃回恢復出的臨時表,只恢復表數據到目標時刻。

  • 閃回表目前只支持普通表的閃回,不支持以下數據庫對象的閃回:

    • 索引

    • toast表

    • 物化視圖

    • 分區表

    • 分區子表

    • 系統表

    • 外表

    • 含有toast子表的表

  • 在目標時間到當前時間內對表執行過以下DDL操作,則無法執行閃回表操作:

    • DROP TABLE

    • ALTER TABLE SET WITH OIDS

    • ALTER TABLE SET WITHOUT OIDS

    • TRUNCATE TABLE

    • 修改過列類型,修改前后的類型不可以直接隱式轉化且不是無需增加其他值進行安全強制轉化的USING子句。

    • 修改表為UNLOGGED或者LOGGED。

    • 增加列為IDENTITY列。

    • 增加列的類型有約束限制。

    • 增加列的默認值表達式含有易變的函數。

      說明

      其中,DROP TABLE的閃回可以通過PolarDB PostgreSQL版的閃回刪除功能來恢復。

使用建議

當出現人為誤操作數據的情況時,建議先使用審計日志快速定位到誤操作發生的時間,然后將目標表閃回到該時間之前。在表閃回過程中,會持有目標表的排他鎖,因此僅可以對目標表進行查詢操作。另外,在表閃回的過程中,目標表涉及到的頁面在共享內存池中換入換出,可能會造成其他數據庫訪問操作的性能抖動。因此,建議在業務低峰期執行閃回操作。

閃回的速度和表的大小相關。當表比較大時,為節約時間,可以增大polar_workers_per_flashback_table參數值,增加并行閃回的worker個數。

在表閃回結束后,可以根據NOTICE的提示,查詢對應閃回表的數據,和原表的數據進行比對。閃回表上不會有任何索引,用戶可以根據查詢需要自行創建索引。在數據比對完成之后,可以將缺失的數據重新回流到原表。

參數說明

參數名稱

參數說明

polar_enable_flashback_log

是否打開閃回日志功能。取值如下:

  • on:打開。

  • off:關閉(默認)。

說明

SIGHUP生效。

polar_enable_fast_recovery_area

是否打開快速恢復區功能。取值如下:

  • 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

兩個閃回點之間的最少WAL日志個數。每個WAL日志大小為1 GB。

取值范圍:1~2147483647。默認值:16。

說明

SIGHUP生效。

polar_flashback_point_timeout

兩個閃回點之間的最小時間間隔。單位:秒。

取值范圍: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

閃回日志索引的布隆過濾器頁面個數。

取值范圍: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表示不限制閃回日志大小。