国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

PostgreSQL在線將普通表轉換為分區表插件之pg_rewrite

IT那活兒 / 2990人閱讀
PostgreSQL在線將普通表轉換為分區表插件之pg_rewrite
點擊上方“IT那活兒”公眾號,關注后了解更多內容,不管IT什么活兒,干就完了!!!

分區的原因

說到分區,我們首先想到的是表為啥要分區,分區有什么好處?

當前版本并不能對單表或者單個分區并行進行垃圾回收,包括單表的freeze也只能是單進程進行凍結和回收。但是對于多表或者多個分區就可以并行執行上述操作,所以在單表數據量過大會發生什么?

  • 1. 當進行autovacuum垃圾回收時,如果該表的DML操作非常頻繁的話,可能導致垃圾回收不過來,進而導致表迅速膨脹,占用過多的空間從而導致故障。
  • 2. 單表過大會導致單表的freeze時間過長,可能會導致xid耗盡,此時就只能停庫操作降低年齡之后才能正常運行。在PG 9.6以前的版本,大表的freeze帶來的IOPS影響較大,體現在數據文件讀寫、WAL日志大量產生。但9.6及以后版本freeze有大幅改進,并不會產生大量的WAL日志了。
  • 3. 表沒分區的話,當要清理歷史數據時就只能delete了,大批量的delete會產生大量的wal日志,從而導致從庫延遲。并且大批量數據的delete事務時間過長,可能會導致表膨脹發生。如果大表分區了,我們可以通過drop歷史分區或者truncate歷史分區的方式清理歷史數據,不用擔心大量wal日志的產生,而且執行時間很快。
  • 4. 單表的只能位于單個表空間,對應到單個目錄,并不能像分區表那樣將各個分區放到不同的表空間,不同的目錄上去。這樣就可能致某個目錄對應的盤IO很繁忙,但其他目錄就很空閑的情況。IO不能分散從而導致性能問題的發生

單表的邏輯備份恢復無法并行執行,數據全量同步時會很慢,并且異常中斷后又需要重新開始這個大表的同步。

當然,pg_rewrite使用是有限制的:

  • 不支持外部表分區。
  • 非分區表一定要有PK。
  • 分區表建議約束和非分區表保持一致, 例如not null,default value 等約束。

pg_rewrite安裝及使用

pg_rewrite是開源的,需要pg 13或更高版本才能安裝。
下載路徑如下:
https://github.com/cybertec-postgresql/pg_rewrite
1. 設置PG_CONFIG環境變量,安裝時,我們必須確保路徑中的pg_config 版本正確。
2. 編譯安裝:
3. 修改postgresql.conf 參數文件并重啟生效。
wal_level = logical
max_replication_slots = 1             #或者在當前值上加1
shared_preload_libraries = pg_rewrite    #將pg_rewrite添加到現有庫中
4. 使用超級用戶創建擴展 pg_rewrite,目前該擴展只包含一個函數partition_table()它可以將非分區表轉換為分區表。

pg_rewrite用法測試案例

1. 創建普通表及結構相同的分區表
2. 普通表插入測試數據
3. 運行 partition_table() 函數將普通表的數據復制至分區表,并將普通表的表名修改成自定義表名用于備份。并將分表區的表名修改成與原普通表一致的表名。

pg_rewrite相關的變量

1. rewrite.check_constraints
在開始復制數據之前,它會檢查目標表是否與源表具有相同的約束,如果發現差異則拋出錯誤。如果目標表上缺少約束,一旦處理完成,違反源表約束的數據將被允許出現在目標表中。甚至對目標表的額外約束也是一個問題,因為擴展只假設它復制的所有數據確實滿足源表上的約束,但是它不會根據目標表上的額外約束來驗證它們。
默認值是true,通過將 rewrite.check_constraints 設置為 false,用戶可以關閉約束檢查。但是不建議這么做,最好是提前檢查目標表與源表的結構是否一致。
2. rewrite.max_xlock_time
盡管大多數時候正在處理的表可用于其他事務的讀寫操作,但需要排他鎖來完成處理。如果過多地阻止對表的訪問,請考慮設置“rewrite.max_xlock_time”參數。
例如:
set rewrite.max_xlock_time to 100;
表示排他鎖的持有時間不應超過 0.1 秒(100 毫秒)。如果最后階段需要更多時間,則特定函數會釋放排他鎖,處理中間其他事務提交的更改并再次嘗試最后階段。多次超過鎖定時間會報錯。如果發生這種情況,您應該增加設置或稍后在寫入活動較低時嘗試處理有問題的表。
默認值為 0,這意味著最后階段可以根據需要花費盡可能多的時間。


本文作者:魏 斌(上海新炬王翦團隊)

本文來源:“IT那活兒”公眾號

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/129240.html

相關文章

  • 大佬你揭秘微信支付的系統架構,你想知道的都在這里了

    摘要:年之前,微信支付業務快速發展,需要一款數據庫能夠安全高效的支撐微信支付商戶系統核心業務,這個重任落在了騰訊數據庫團隊自研上。由于是用于微信支付的核心數據庫,騰訊被定位為安全高效,穩定,可靠的數據庫集群。 歡迎大家前往騰訊云+社區,獲取更多騰訊海量技術實踐干貨哦~ 本文由李躍森發表于云+社區專欄李躍森,騰訊云PostgreSQL首席架構師,騰訊數據庫團隊架構師,負責微信支付商戶系統核心數...

    Terry_Tai 評論0 收藏0
  • PostgreSQL 自動分區維護管理插件 pathman 基礎使用

    摘要:使用數據庫會自動的根據從某幾個片中讀取數據。更加詳細的請參考德哥文章 官方地址:https://github.com/postgrespr...關于pathman的原理和優化問題,請移步至https://yq.aliyun.com/article... 檢查環境變量如果直接執行psql命令提示command not found則執行下面的命令設置環境變量 root@host# PA...

    MASAILA 評論0 收藏0

發表評論

0條評論

IT那活兒

|高級講師

TA的文章

閱讀更多
最新活動
閱讀需要支付1元查看
<