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

資訊專欄INFORMATION COLUMN

PostgreSQL膨脹表或索引收縮插件之pg_squeeze

IT那活兒 / 3340人閱讀
PostgreSQL膨脹表或索引收縮插件之pg_squeeze
點擊上方“IT那活兒”公眾號,關注后了解更多內容,不管IT什么活兒,干就完了!!!

  

PostgreSQL的MVCC是通過使用一種多版本模型來維護,所以表或索引的膨脹是不可避免的。

通常我們收縮膨脹表或索引可以使用vacuum full、rewrite table(如在線CLUSTER)的方式重建表,至于索引可以重建或重定位表的索引。

但上面說的方式是需要持有排它鎖,會堵塞讀操作。為了減少鎖沖突,相應的插件就應運而生,例如pg_squeeze、pg_repack等。


pg_squeeze和pg_repack區

首先說pg_repack,pg_repack 是pg_reorg的一個分支。其工作機制如下

  • 創建一個日志表來記錄對原始表所做的更改。
  • 在原始表上添加一個觸發器,將 INSERT、UPDATE 和 DELETE 記錄到我們的日志表中。
  • 創建一個包含舊表中所有行的新表。
  • 在這個新表上建立索引。
  • 將日志表中產生的所有更改應用到新表。
  • 使用system catalog(包含了元數據的VIEW和表的一個schema)交換表,包括索引和toast table。
  • 刪除原始表。
從上述pg_repack的工作機制來看,其使用了新建表的方式重組數據,最后通過切換完成數據重組。僅僅在切換時需要持有排他鎖,因時間非常短暫,影響比VACUUM FULL和rewrite的方式小很多。但是pg_repack都需要建觸發器,記錄下增量重組時,原表產生的增量數據。因此重組時,觸發器及原表的DML會帶來一定的影響
而pg_squeeze的工作原理是創建一個新的數據文件,然后在復制快照時將所做的更改應用到表中。這是使用REDO和logical replication來捕獲對重建表的數據更改的方式來完成。

所以相對于pg_repack,其不需要建觸發器,并且在重組時對原表的DML幾乎沒有性能影響。另外pg_squeeze支持自動重組。即通過設置閾值,自動啟動WORKER進程,將數據復制到重組表,最后加鎖切換。但是要求表必須有一個PRIMARY KEY,或者在非空列上至少有一個唯一索引。

pg_squeeze安裝及使用

下載路徑如下:

https://github.com/cybertec-postgresql/pg_squeeze

1. 設置PG_CONFIG環境變量,安裝時,我們必須確保路徑中的pg_config 版本正確
2. 編譯安裝
3. 修改postgresql.conf 參數文件并重啟生效
wal_level = logical
max_replication_slots = 1             #或者在當前值上加1
shared_preload_libraries = pg_squeeze    #將pg_squeeze添加到現有庫中。
4. 使用超級用戶創建擴展pg_squeeze
CREATE EXTENSION pg_squeeze;
常規處理表注冊詳細:
要使“pg_squeeze”擴展知道該表,您需要在“squeeze.tables”表中插入一條記錄。添加后,會定期檢查表的統計信息。每當表滿足要“squeezed”的條件時,就會將“任務”添加到隊列中。
最簡單的“注冊”如下:
INSERT INTO squeeze.tables (tabschema, tabname, schedule)
VALUES (public, person, ({10}, {23}, NULL, NULL, {4, 6}));
可以選擇指定其他列,例如:
INSERT INTO squeeze.tables
(tabschema, tabname, schedule, free_space_extra, vacuum_max_age,max_retry)
VALUES (public, person, ({10}, {23}, NULL, NULL, {4, 6}), 30,2 hours, 2);
釋:表“public”.“person”在每周四和周六的 23:10 進行檢查。空閑空間閾值為30%。

字段描述如下:

  • tabschema”和“tabname”分別是模式和表名。

  • schedule”列告訴何時應該檢查表,并且可能會被squeezed。調度由以下復合數據類型的值描述,CREATE TYPE schedule AS ( minutes minute[], hours hour[], days_of_month dom[], months month[], days_of_week dow[] );
    “minutes”(0 到 59)和“hours”(0 到 23)指定一天內的檢查時間,而“days_of_month”(1 到 31)、“months”(1 到 12)和“days_of_week” "(0 到 7,其中 0 和 7 都代表星期日)確定日期。

    如果“分鐘”、“小時”和“月”都與當前時間戳匹配,則執行檢查,而 NULL 值分別表示任何分鐘、小時和月。至于“days_of_month”和“days_of_week”,至少其中之一需要與當前時間戳匹配,或者兩者都需要為 NULL 才能進行檢查。

  • free_space_extra”表示空閑空間超過多少時就會對表進行重建,默認是50。

  • min_size”是表必須占用的最小磁盤空間(以 MB 為單位)才能進行處理。默認值為 8。

  • vacuum_max_age”當進行一次vacuum后,認為fsm是有效的最大時間,默認1小時。

  • max_retry”當重建表失敗時最大的重新嘗試的次數,默認是0。

  • clustering_index”是已處理表的現有索引。處理完成后,表的元組將按此索引的鍵進行物理排序。

  • rel_tablespace”是表應該移動到的現有表空間。NULL 意味著表應該保持在原來的位置。

  • ind_tablespaces”是一個二維數組,其中每一行指定索引的表空間映射。第一列和第二列分別代表索引名和表空間名。所有未指定映射的索引都將保留在原始表空間中。

  • skip_analyze”表示表處理后不應該有ANALYZE命令。默認值為“false”,表示默認執行 ANALYZE。

啟動pg_squeeze自動處理命令
SELECT squeeze.start_worker();
關閉pg_squeeze命令
SELECT squeeze.stop_worker();
設置squeeze.max_xlock_time控制最大占用鎖的時間。
SET squeeze.max_xlock_time TO 100;
:單位為毫秒。
臨時處理:
還可以手動收縮表,而無需注冊,跳過任何時間和膨脹檢查。
squeeze.squeeze_table(tabchema name, tabname name, clustering_index name, rel_tablespace name, ind_tablespaces name[])
例:
SELECT squeeze.squeeze_table(public, person_old202209, null, null, null);


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

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

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

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

相關文章

  • PostgreSQL的實踐一:初識

    摘要:每個服務由多個進程組成,為首的進程名為。服務使用字節長的內部事務標識符,即時發生重疊后仍然繼續使用,這會導致問題,所以需要定期進行操作。操作被認為是緊跟操作后的操作。在涉及高比例插入刪除的表中,會造成索引膨脹,這時候可以重建索引。 簡介和認知 發音 post-gres-q-l 服務(server) 一個操作系統中可以啟動多個postgres服務。每個服務由多個進程組成,為首的進程名為p...

    yibinnn 評論0 收藏0
  • 跟著大彬讀源碼 - Redis 8 - 對象編碼字典

    摘要:屬性記錄了哈希表目前已有節點鍵值對的數量。字典字典的結構類型特定函數私有數據哈希表兩個記錄進度的標志。此外,字典在進行時,刪除查找更新等操作會在兩個哈希表上進行。在對哈希表進行擴容或收縮操作時,使用漸進式完成。 字典,是一種用于保存鍵值對的抽象數據結構。由于 C 語言沒有內置字典這種數據結構,因此 Redis 構建了自己的字典實現。 在 Redis 中,就是使用字典來實現數據庫底層的。...

    kun_jian 評論0 收藏0
  • 對Flex布局的總結與思考

    摘要:主軸方向的多余空間的出現是因為容器寬度元素項寬度之和。對空間分配的思考是如何計算項的寬度的所有項先按照原始寬度在容器中排列。開發時布局的一般流程根據設計,確定需要多少行來顯示所有內容,然后確定每一行有哪些項。對每一項,定義其樣式。 閱讀本文之前最好對flex布局有基本了解,可以通過參考資料中列舉的資源來學習。 flex布局規范的設計目標 一維布局模型(one-dimensional...

    springDevBird 評論0 收藏0
  • Multi-Model多模數據庫引擎設計與實現

    摘要:數據庫多模是指同一個數據庫支持多個存儲引擎,可以同時滿足應用程序對于結構化半結構化非結構化數據的統一管理需求。多模式數據管理能力,使得數據庫能夠進行跨部門跨業務的數據統一存儲與管理,實現多業務數據融合,支撐多樣化的應用服務。 如今,隨著業務互聯網化和智能化的發展以及架構 微服務和云化的發展,應用系統對數據的存儲管理提出了新的標準和要求,數據的多樣性成為了數據庫平臺面臨的一大挑戰,數據庫...

    UCloud 評論0 收藏0
  • 系統架構

    強力推薦!那些你不能錯過的 GitHub 插件和工具 以代碼托管平臺起家的 GitHub 網站,已然成為全球程序員工作和生活中不可或缺的一份子。從優秀的企業,到優秀的程序員,都將自己最優秀的代碼作品存放在這片開源凈土里,供彼此學習交流。 GitHub Trending 欄目甚至已經成為 IT 從業人員的新聞日報,每日必讀。在之前的一… PostgreSQL 數據庫的前世今生 編輯:IT大咖說閱讀字...

    Gilbertat 評論0 收藏0

發表評論

0條評論

IT那活兒

|高級講師

TA的文章

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