当前位置: 首页 > news >正文

【赵渝强老师】PostgreSQL中表的碎片

b429

在PostgreSQL中删除行的时候,这些行只是被标记为“dead”,而不是真正从物理存储上进行删除了,因而空间也没有真的被释放回收。在PostgreSQL中除非进行自动的auto vacuum或者是手动的vacuum,否则数据块所占用的物理空间不会被回收。因此在物理存储空间被回收之前,会导致存储空间中存在很多空洞。如果表结构中包含动态长度字段,那么这些空洞甚至可能不能被PostgreSQL重新用来存储新的行。因此,大量随机的DELETE操作,必然会在数据文件中造成不连续的空白空间。而当插入数据时,这些空白空间也不会被利用起来,于是造成了数据的存储位置不连续。物理存储顺序与逻辑上的排序顺序不同,这种就是数据碎片。

对于大量的UPDATE,也会产生文件碎片化 , PostgreSQL的最小逻辑存储分配单位是数据块(Block),其默认值是8K。因此大量的更新操作也可能导致数据块的分裂(Block Split),即:同一个字段的数据可能存储在不同的数据块中。频繁的数据块分裂,会使得数据的存储变得稀疏,并且被不规则的数据填充,所以最终数据会有碎片。

image.png
点击这里查看视频讲解:【赵渝强老师】PostgreSQL中表的碎片

下面通过具体的步骤来演示如何清理表的碎片。
(1)创建一张新的表,并往表中插入5000万条记录

scott=# create table testfragement(tid int,tname varchar(20));
scott=# insert into testfragement select n,'myname_'||n from generate_series(1,50000000) n;

(2)查看表testfragement占用的容量大小。

scott=# select pg_size_pretty(pg_relation_size('testfragement'));# 输出的结果如下:pg_size_pretty 
----------------2488 MB
(1 row)

(3)删除表中所有数据。

scott=# delete from testfragement;

(4)再次查看表testfragement占用的容量大小。

scott=# select pg_size_pretty(pg_relation_size('testfragement'));# 输出的结果如下:pg_size_pretty 
----------------2488 MB
(1 row)# 从输出的结果可以看出,尽管删除了表中的数据,表所占用的空间依然没有释放。

(5)查看表的状态信息。

scott=# \x
scott=# select * from pg_stat_user_tables where relname = 'testfragement';# 输出的结果如下:
-[ RECORD 1 ]-------+------------------------------
relid               | 16574
schemaname          | public
relname             | testfragement
seq_scan            | 1
seq_tup_read        | 50000000
idx_scan            | 
idx_tup_fetch       | 
n_tup_ins           | 50000000
n_tup_upd           | 0
n_tup_del           | 50000000
n_tup_hot_upd       | 0
n_live_tup          | 0
n_dead_tup          | 49999426
n_mod_since_analyze | 0
n_ins_since_vacuum  | 0
last_vacuum         | 
last_autovacuum     | 2023-04-28 09:14:26.066678+08
last_analyze        | 
last_autoanalyze    | 2023-04-28 09:14:46.677939+08
vacuum_count        | 0
autovacuum_count    | 1
analyze_count       | 0
autoanalyze_count   | 1其中:
n_live_tup 的数量是当前表的数据量。
n_dead_tup 的数据量是未回收的空间。# 从参数n_dead_tup输出结果上看,表testfragement仍然占用了很多 ”空闲“ 数据块,其空间没有被回收。

(6)手动进行一下碎片的清理。

scott=# vacuum testfragement;# 此时会产生后台相应的进程:
[root@mydb ~]# ps -ef|grep VACUUM
postgres  6649  3540 .... postgres: postgres [local] VACUUM 

(7)再次查看一下表的状态

scott=# \x
scott=# select * from pg_stat_user_tables where relname = 'testfragement';# 输出的信息如下:
-[ RECORD 1 ]-------+------------------------------
relid               | 16574
schemaname          | public
relname             | testfragement
seq_scan            | 1
seq_tup_read        | 50000000
idx_scan            | 
idx_tup_fetch       | 
n_tup_ins           | 50000000
n_tup_upd           | 0
n_tup_del           | 50000000
n_tup_hot_upd       | 0
n_live_tup          | 0
n_dead_tup          | 0
n_mod_since_analyze | 0
n_ins_since_vacuum  | 0
last_vacuum         | 2023-04-28 09:23:05.463206+08
last_autovacuum     | 2023-04-28 09:18:11.434888+08
last_analyze        | 
last_autoanalyze    | 2023-04-28 09:14:46.677939+08
vacuum_count        | 1
autovacuum_count    | 2
analyze_count       | 0
autoanalyze_count   | 1# 参数n_live_tup和n_dead_tup都变成了0,这说明表所占用的空间已经被释放回收。

(8)重新查看表testfragement占用的容量大小。

scott=# select pg_size_pretty(pg_relation_size('testfragement'));# 输出的结果如下:pg_size_pretty 
----------------0 bytes
(1 row)
http://www.jsqmd.com/news/431970/

相关文章:

  • 2026军用三维重建无人机集群软硬一体化供应商推荐:猎翼无人机引领全闭环实战新范式 - 品牌2026
  • 收藏!2026程序员必看:毕玄、方汉刷屏后,不会AI真的要被淘汰?
  • 聊聊2026年成都分布式光伏电站建设加工厂,哪家售后好性价比高 - 工业设备
  • 2026最新专业手表维修保养推荐!全国优质名表服务机构权威榜单发布 - 十大品牌榜
  • Garaventa Lift(柯凡特)轮椅升降平台助力北京环球影城无障碍改造 - TIMWORKROOM
  • 梳理2026年上海CPA专业辅导企业,哪个口碑好 - mypinpai
  • 计算机毕设java网络相册设计与实现 基于SpringBoot的云端照片存储与分享平台的设计与实现 基于Java Web的个人影像资料管理系统的设计与实现
  • 2026最新名表回收推荐!全国优质名表回收机构权威榜单发布 - 十大品牌榜
  • 2026年3月智能温控设备厂家推荐,全自动温控技术深度解析 - 品牌鉴赏师
  • 2026年地暖防冻液厂家最新推荐:四川防冻液/成都乙二醇/成都防冻液/空调防冻液/长效防冻液价格/选择指南 - 优质品牌商家
  • 分析2026年宁波推荐手工西服定制的品牌,郡狮费用是多少 - 工业推荐榜
  • 2026年远心镜头行业实力厂家综合盘点与品牌格局解析 - 品牌推荐大师1
  • 护发素VS发膜排行榜:功效与性价比大比拼 - 博客万
  • 2026年3月T式提升机厂家推荐,多场景适配与耐用品质实测对比 - 品牌鉴赏师
  • 2026年行业内专业的三边封包装袋制造商推荐排行榜单,自立袋/纹路袋/四边封包装袋,三边封包装袋制造商怎么选 - 品牌推荐师
  • 2026石家庄高新区新房全案设计装修公司top6推荐|商装定制与老房焕新优选 - 品牌智鉴榜
  • 关节炎贴膏产品测评对比? - 中媒介
  • 发膜排行榜2026:10款新晋黑马值得关注 - 博客万
  • 安徽膝关节疼痛贴膏推荐测评? - 中媒介
  • 2026 最新喷浆机实力厂商权威推荐:湿喷机、混凝土喷浆机、隧道喷浆设备源头工厂,专业品质与高效施工解决方案深度解析 - 深度智识库
  • 牛客刷题-Day32
  • Xray的安装与使用
  • 2026年 铣刀厂家推荐排行榜:金刚石/木工/碳纤维/金属切削/PCB铣刀等全品类专业解析与选购指南 - 品牌企业推荐师(官方)
  • 2026年空调防冻液公司权威推荐:四川乙二醇生产厂家/四川防冻液/成都乙二醇/成都防冻液/长效防冻液价格/选择指南 - 优质品牌商家
  • Java 线程的原理和使用方法
  • 2026年市场调查公司推荐厂家权威推荐榜:第三方市场调查机构推荐/第三方市场调查机构推荐/选择指南 - 优质品牌商家
  • 2026推荐杭州公司注册业务代理公司综合指南 - 品牌排行榜
  • Moto 手机应用锁怎么设?官方自带功能,守护隐私超简单
  • 别再做“模拟器”了!腾讯应用宝为开发者打开原生级PC流量入口
  • 2026表面张力计品牌推荐榜单(精度高、稳定性高)与选型策略 - 品牌推荐大师1