PostgreSQL的MVCC是通過使用一種多版本模型來維護,所以表或索引的膨脹是不可避免的。
通常我們收縮膨脹表或索引可以使用vacuum full、rewrite table(如在線CLUSTER)的方式重建表,至于索引可以重建或重定位表的索引。
首先說pg_repack,pg_repack 是pg_reorg的一個分支。其工作機制如下:
所以相對于pg_repack,其不需要建觸發器,并且在重組時對原表的DML幾乎沒有性能影響。另外pg_squeeze支持自動重組。即通過設置閾值,自動啟動WORKER進程,將數據復制到重組表,最后加鎖切換。但是要求表必須有一個PRIMARY KEY,或者在非空列上至少有一個唯一索引。
下載路徑如下:
https://github.com/cybertec-postgresql/pg_squeeze
wal_level = logical
max_replication_slots = 1 #或者在當前值上加1。
shared_preload_libraries = pg_squeeze #將pg_squeeze添加到現有庫中。
CREATE EXTENSION pg_squeeze;
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);
字段描述如下:
“tabschema”和“tabname”分別是模式和表名。
如果“分鐘”、“小時”和“月”都與當前時間戳匹配,則執行檢查,而 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。
SELECT squeeze.start_worker();
SELECT squeeze.stop_worker();
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);
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/129227.html
摘要:每個服務由多個進程組成,為首的進程名為。服務使用字節長的內部事務標識符,即時發生重疊后仍然繼續使用,這會導致問題,所以需要定期進行操作。操作被認為是緊跟操作后的操作。在涉及高比例插入刪除的表中,會造成索引膨脹,這時候可以重建索引。 簡介和認知 發音 post-gres-q-l 服務(server) 一個操作系統中可以啟動多個postgres服務。每個服務由多個進程組成,為首的進程名為p...
摘要:屬性記錄了哈希表目前已有節點鍵值對的數量。字典字典的結構類型特定函數私有數據哈希表兩個記錄進度的標志。此外,字典在進行時,刪除查找更新等操作會在兩個哈希表上進行。在對哈希表進行擴容或收縮操作時,使用漸進式完成。 字典,是一種用于保存鍵值對的抽象數據結構。由于 C 語言沒有內置字典這種數據結構,因此 Redis 構建了自己的字典實現。 在 Redis 中,就是使用字典來實現數據庫底層的。...
摘要:主軸方向的多余空間的出現是因為容器寬度元素項寬度之和。對空間分配的思考是如何計算項的寬度的所有項先按照原始寬度在容器中排列。開發時布局的一般流程根據設計,確定需要多少行來顯示所有內容,然后確定每一行有哪些項。對每一項,定義其樣式。 閱讀本文之前最好對flex布局有基本了解,可以通過參考資料中列舉的資源來學習。 flex布局規范的設計目標 一維布局模型(one-dimensional...
摘要:數據庫多模是指同一個數據庫支持多個存儲引擎,可以同時滿足應用程序對于結構化半結構化非結構化數據的統一管理需求。多模式數據管理能力,使得數據庫能夠進行跨部門跨業務的數據統一存儲與管理,實現多業務數據融合,支撐多樣化的應用服務。 如今,隨著業務互聯網化和智能化的發展以及架構 微服務和云化的發展,應用系統對數據的存儲管理提出了新的標準和要求,數據的多樣性成為了數據庫平臺面臨的一大挑戰,數據庫...
閱讀 1346·2023-01-11 13:20
閱讀 1684·2023-01-11 13:20
閱讀 1132·2023-01-11 13:20
閱讀 1858·2023-01-11 13:20
閱讀 4100·2023-01-11 13:20
閱讀 2704·2023-01-11 13:20
閱讀 1385·2023-01-11 13:20
閱讀 3597·2023-01-11 13:20