成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

PostgreSQL 學習篇— PG 表膨脹

數據庫 PostgreSQL
有一種表膨脹情況比較難處理,autovacuum自動清理死元組速度趕不上生成速度。因為update、 insert、delete事務并發太多,這次的vacuum還沒來得及清理出之前的可用空間,就有大量update生成新的空間和死元組,導致表不斷膨脹。?

PG表膨脹原因

PG特殊的MVCC機制,delete不會真的刪除元組,update相當于delete+insert,舊元組本身不能通過DML語句來刪除,這樣就只有“漲”空間沒有“清理”空間,這就是表膨脹。

此時一般需要vacuum來清理死元組,把空間標記為可用,下次寫入時可以用到這部分空間;或者vacuum full等方式重寫表,讓表變得更加緊湊。

場景復現

OS:CentOS 7.6  

db版本:PG 14.2 

表名: cmdb_objects

圖片圖片

表結構:

圖片圖片

我先插入兩條數據,然后進行循環插入,只有object_type字段數據不同,用于后續做更新操作。

insert into cmdb_objects values ('xgrdb','xgr','test67','index');
insert into cmdb_objects values ('xgrdb','xgr','test67','table');
insert into cmdb_objects select * from cmdb_objects;

現在該表中存在32768條數據,再進行update更新操作:

update cmdb_objects set object_type='view' where object_type='table';

圖片圖片

更新后該表會存在16384死行,如業務數據量大,且有頻繁的更新操作,該表就會產生高水位。可通過pg_stat_all_tables視圖來查詢該表中存在的死行、活躍行數。

select relname,n_live_tup,n_dead_tup from pg_stat_all_tables where relname='cmdb_objects';

圖片圖片

處理方式

第一種處理方法vacuum:

把表中的dead tuples進行標記刪除,并沒有真正的物理刪除,表的實際使用空間沒有減小,只是將dead tuples的航空件轉換為可以使用的狀態,vacuum過程中,可以正常訪問表數據,不鎖表。

圖片

你也可以在執行碎片清理時收集統計信息:

vacuum(verbose,analyze) test;

16384死行已被刪除(該方式適用于實時更新的,更新數據量不大的表,可以每天進行批量操作)。

第二種處理方法vacuum full:

物理刪除表中的dead tuples,釋放空間給操作系統;vacuum full過程中,表被鎖定,不允許訪問。

圖片圖片

執行前表大小如下:

圖片圖片

執行vacuum full:

圖片圖片

執行后表大小:

可以看到該表的使用空間已被物理刪除釋放。(該方式通過重建表,回收所有碎片空間,適用于經常進行大批量更新數據的表,定制策略進行執行,也可以在維護時間業務表每周執行一次。)

總結一下vacuum 與 vacuum full的區別:

  • Vacuum不會阻塞查詢和DML業務;不會立即回收空間,只是把空間標記為可用,降低高水位;如果表的最后一個page沒有元組了,這個page會被truncate。
  • Vacuum ful8級鎖,阻塞一切;表完全重寫,操作系統上對應的文件會被清理和重建;重建索引、FSM(可用空間文件)、VM (page可見性文件);會創建一個副本表,該表使用的磁盤空間最大可能翻至2倍,磁盤空間不足,謹慎執行。

第三種處理方法autovacuum參數控制:

圖片圖片

autovacuum是postgres里面一個服務端進程,可在一定條件下自動觸發執行。

該參數值默認為 on(開啟全局自動),主要作用包括:

  • 清理死元組(UPDATE或DELETE操作后留下的),并對表進行分析;
  • 更新可用空間映射(free space map),以跟蹤表塊中的可用空間;
  • 更新僅索引掃描所需的可見性圖(visibility map);
  • 凍結(freeze)表行,以便事務ID計數器可以安全地環繞。

表膨脹的危害:

  • 表占用過大的空間;
  • 進而引起sql性能降低;
  • 表過大會也會導致vacuum清理時間變成長;vacuum full阻塞時間也會變長,不過可以通過pg_repack來代替vacuum full,減少阻塞時間。

以上操作都會增加cpu與io的資源消耗。

補充:有一種表膨脹情況比較難處理,autovacuum自動清理死元組速度趕不上生成速度。因為update、 insert、delete事務并發太多,這次的vacuum還沒來得及清理出之前的可用空間,就有大量update生成新的空間和死元組,導致表不斷膨脹。

責任編輯:武曉燕 來源: IT那活兒
相關推薦

2024-11-13 08:00:00

PostgreSQ插件開發

2011-08-25 09:56:05

PostgreSQLpg_ident.co

2018-05-23 13:47:28

數據庫PostgreSQL查詢優化

2018-05-25 15:04:57

數據庫PostgreSQL查詢優化器

2011-08-23 10:54:16

PostgreSQL表空間用戶

2017-08-30 16:59:54

PostgreSQL分區表

2011-08-24 13:37:33

PostgreSQLpg_hba.conf

2022-12-26 08:07:03

MySQL批量數據

2021-12-28 16:33:26

接口函數組合

2011-03-24 14:40:29

PostgreSQL數管理

2011-02-24 15:04:00

PostgreSQL數據庫psql

2011-08-23 09:54:31

路由路由表路由器

2021-07-02 09:45:29

MySQL InnoDB數據

2021-08-10 15:44:37

PostgreSQL表分區分區表

2025-03-03 00:13:50

2015-07-16 15:04:07

sail.js

2018-04-23 10:16:29

JavaJavaWeb語言

2024-03-04 09:29:57

PostgreSQL數據庫RDBMS

2010-07-13 16:20:21

Perl 哈希表

2018-01-15 16:57:18

MySQLOraclePostgreSQL
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 一区欧美 | 免费精品视频在线观看 | 色婷婷精品国产一区二区三区 | 久久精品亚洲精品国产欧美 | 亚州精品天堂中文字幕 | 久久视频一区 | 中文字幕成人在线 | 亚洲伊人精品酒店 | 亚洲国产精品99久久久久久久久 | 久久99成人 | 国产成人在线视频 | 日皮视频免费 | 男人的天堂在线视频 | 亚洲一区自拍 | 亚洲黄色片免费观看 | 亚洲一区二区在线电影 | 国产亚洲第一页 | 色婷婷激情综合 | 天堂在线中文 | 久久久久国产 | 午夜电影网站 | 亚洲五码在线 | 日本激情视频中文字幕 | a国产视频| 成人精品免费视频 | 一区二区三区日本 | 免费同性女女aaa免费网站 | 久久99网站 | 欧美日韩视频一区二区 | 欧美视频在线免费 | 91午夜在线| 91中文字幕在线 | 日本欧美黄色片 | 97色在线视频 | 国产精品毛片久久久久久久 | 日韩视频在线一区二区 | 美女爽到呻吟久久久久 | 欧美精品91| 国产一区中文字幕 | 国产91九色 | 国产人成精品一区二区三 |