表膨脹的產生
我們知道Oracle的多版本并發控制是基于塊級的,利用回滾段(UNDO)機制。在回滾段中保存了某個數據被修改之前的前映像的數據。而PostgreSQL中沒有UNDO這一概念,PostgreSQL中的多版本并發是通過在表中數據行的多個版本來實現的,例如在一張表中我們要更新一條記錄,PG并不是直接修改該數據,而是通過插入一條全新的數據,同時對老數據加以標識。
PostgreSQL的MVCC機制在數據更新時會產生死元組(dead tuples),如果果不清理掉那些dead tuples(對任何事務都是不可見的)將會永遠留在數據文件中,浪費磁盤空間,對于表來說,有過多的刪除和更新,dead tuples很容易占絕大部分磁盤空間。而且dead tuples也會在索引中存在,更加加重磁盤空間的浪費。這在PostgreSQL中稱之為膨脹(bloat)。自然的,需要處理的數據查詢越多,查詢的速度就越慢。
表膨脹的查詢
查詢表膨脹可以使用插件pgstattuple,提供了pgstatetuple()和pgstatindex()兩個統計表和索引的方法。
初次使用這個插件時需要創建:
創建測試表:
查看表的死元組,可以看到剛建的表死元組為0,表膨脹系數0:
做些DML操作,觀察表的死元組占比13%,表的膨脹系數34%:
表膨脹的清理
1. 執行 vacuum清理死元組,清理后表的死元組為0,表的膨脹系數還是34%:
可見vacuum命令通常不會將磁盤空間返回給操作系統,但它將使它對新行可用。這時我們需要使用vacuum full 命令來回收空間。
注意:vacuum full 會回收空間并返回給操作系統,但是它有很多缺點。首先,它會產生獨立鎖,阻塞所有操作(包括select).其次,它實際上創建了一個表的副本,使所需的磁盤空間加倍,因此當系統可用磁盤空間很少時,就不太實用。
2. 插件實現:
vacuum full會產生獨立鎖,阻塞所有操作(包括select),我們可以使用插件pg_squeeze來完成這個操作,它使用REDO和logical replication實現增量重組,不需要建立觸發器,但是要求表上面有PK或者UK。
由于pg_squeeze需要使用logical replication,所以必須設置足夠多的slots,而且必須注意可能與STANDBY爭搶SLOTS,必須預留足夠的SLOTS。
使用示例 squeeze.squeeze_table(tabchema name, tabname name,
clustering_index name, rel_tablespace name, ind_tablespaces name[]):
另外由于pg_squeeze可以自動,也可以不設置自動的收縮。對于自動的收縮,建議不要對繁忙的數據庫開啟,以免在高峰期觸發,帶來一定的性能影響。
--注冊任務(示例表示:public下的表test,在每天的23:10分檢查,當表的空閑空間超過10時對表重建) insert into squeeze.tables (tabschema, tabname, schedule, free_space_extra) values (public, test, ({10}, {23}, NULL, NULL, NULL), 10); --查看任務 select * from squeeze.tables; --開啟進程 select squeeze.start_worker(); --查看任務記錄 select * from squeeze.tables_internal; --關閉進程 select squeeze.stop_worker(); |
任務完成后可以查看任務記錄:
更多精彩干貨分享
點擊下方名片關注
IT那活兒
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/129797.html
摘要:本文以為例來介紹如何打造自己的搜索引擎。其官方網站是可以說支持包括英文中文等所有語言的搜索。默認把中文按字拆分的,但這樣就會產生搜索出不相干的內容來。因此,有人就給打了中文分詞的補丁。 Google搜索引擎建立至今已經快20年了,之后全球各類大大小小類似的搜索引擎也陸續出現、消亡。國內目前以百度為大,搜狗、360、必應等也勢在必爭。搜索引擎技術也發展的相當成熟,同時也就出現了很多開源的...
摘要:每個服務由多個進程組成,為首的進程名為。服務使用字節長的內部事務標識符,即時發生重疊后仍然繼續使用,這會導致問題,所以需要定期進行操作。操作被認為是緊跟操作后的操作。在涉及高比例插入刪除的表中,會造成索引膨脹,這時候可以重建索引。 簡介和認知 發音 post-gres-q-l 服務(server) 一個操作系統中可以啟動多個postgres服務。每個服務由多個進程組成,為首的進程名為p...
摘要:某寶一年一度的集五福活動更是成為每年的必備活動。今年再來對福字做文章,演示下如何用的圖像處理功能,把一幅福字圖片轉出種不同的效果最圖像處理最常用的兩個模塊是和,這里我們選擇。輪廓福使用了自帶的圖像輪廓提取功能。 快過年了,各種互聯網產品都出來撒紅包。某寶一年一度的集五福(shua hou)活動更是成為每年的必備活動。雖然到最后每人大概也就分個兩塊錢,但作為一個全民話題,大多數人還是愿意...
摘要:這是坐標百度,好像沒啥好研究的了,不過出于好奇還是想知道使用是如何做到把文字區域進行框選的,所以接下來我們就看看如何在上使用實現圖片中的文字框選。一些探索 最近下了幾個OCR的App(比如白描),發現可以選中圖片中的文字行逐行轉成文字,覺得很有意思(當然想用要花錢啦),想著自己研究一下實現原理,google之后,發現了兩個庫,一個是OpenCV,在機器視覺方面應用廣泛,圖像分析必備利器。另一...
閱讀 1353·2023-01-11 13:20
閱讀 1699·2023-01-11 13:20
閱讀 1211·2023-01-11 13:20
閱讀 1902·2023-01-11 13:20
閱讀 4161·2023-01-11 13:20
閱讀 2751·2023-01-11 13:20
閱讀 1397·2023-01-11 13:20
閱讀 3664·2023-01-11 13:20