PostgreSQL表膨胀终结者
点击上方蓝字关注我
PostgreSQL数据库表在删除数据后磁盘空间未释放,该怎么办?
主流的压缩表工具有哪些?该如何选择?
1、从空间未释放说起
近期生产环境出现一张表占用size已达2T,且会定期删除记录,但是,空间一直未释放,是何原因?
原因就在于vacuum,而vacuum怎么存储,清理数据的可参考官方文档进行查看。https://www.postgresql.org/docs/current/routine-vacuuming.html
出现表一直膨胀,该如何处理?开源社区的魅力就在于很多大神会提供很多工具来解决对应的问题,而本问题则有2种主要的工具:pg_repack和pgcompacttable
2. 工具对比
2.1 pg_repack
pg_repack的处理方式是创建一张新表,再将历史数据从原表中拷贝一份到新表。在拷贝过程中为了避免表被锁定,会创建了一个额外的日志表来记录原表的改动,并添加了一个涉及INSERT、UPDATE、DELETE操作的触发器将变更记录同步到日志表。当原始表中的数据全部导入到新表中,索引重建完毕以及日志表的改动全部完成后,pg_repack会用新表替换旧表,并将原旧表Drop掉。此工具过程简单且靠谱,单需要额外的磁盘空间来报错临时创建的中间表。
2.2 pgcompacttable
pgcompacttable利用了PostgreSQL的一个有趣特性:在执行INSERT和UPDATE操作时,会将所有新版本的行移到表最开始的可用空间。此为pgcompacttable工具的关键,因为如果从末端反向开始更新所有行,最终所有可用空间被这些行填充,并将表尾部的空间全部释放以便让定期vacuum进行truncate。这样一来,pgcompacttable通过批量更新和vacuum强制移动,最终整个表被重新整理,达到压缩的效果。此工具对磁盘空间要求低,且性能影响可控。
2.3 对比
为了便于大家选择工具,简单做了一个对比说明供参考。
pg_repack | pgcompacttable | |
是否需要保证性能 | 否 | 是 |
是否移动表/索引 |
是 | 否 |
是否有足够空间 | 是 | 否 |
压缩速率是否高 | 是 | 否 |
小结:因很多场景下磁盘空间有限,因而经常选择使用pgcompacttable较多,下面就记录一下pgcompacttable的安装及使用。
3. pgcompacttable部署及使用实例
3.1 添加pgstattuple
pgcompacttable工具使用过程中需要依赖pgstattuple,因此需先添加pgstattuple。如果是源码安装的postgresql,则源码里包含了postgresql-contrib,因此,进行编译及安装即可。
yum install perl-Time-HiRes perl-DBI perl-DBD-Pg -y
cd contrib/
make
make install
编译完成后会产生几个文件
lib/pgstattuple.so
share/extension/pgstattuple*
之后在所需要使用的数据库里添加pgstattuple
psql -d testdbtestdb=# create extension if not exists pgstattuple;
CREATE EXTENSION
3.2 部署pgcompacttable
下载依赖及安装包后即可使用
# yum install perl-Time-HiRes perl-DBI perl-DBD-Pg -y
# su - postgres
$ git clone https://github.com/dataegret/pgcompacttable.git
3.3 pgcompacttable使用
pgcompacttable可以对database级别、schema级别、table级别进行压缩
./pgcompacttable -h localhost -U postgres -d testdb
./pgcompacttable -h localhost -U postgres -d testdb -n public
./pgcompacttable -h localhost -U postgres -d testdb -n public -t test_table1
往期精彩回顾
1. MySQL高可用之MHA集群部署
2. mysql8.0新增用户及加密规则修改的那些事
3. 比hive快10倍的大数据查询利器-- presto
4. 监控利器出鞘:Prometheus+Grafana监控MySQL、Redis数据库
5. PostgreSQL主从复制--物理复制
6. MySQL传统点位复制在线转为GTID模式复制
7. MySQL敏感数据加密及解密
8. MySQL数据备份及还原(一)
9. MySQL数据备份及还原(二)
扫码关注
PostgreSQL表膨胀终结者相关推荐
- PostgreSQL 收缩膨胀表或索引 - pg_squeeze or pg_repack
PostgreSQL 收缩膨胀表或索引 - pg_squeeze or pg_repack 作者 digoal 日期 2016-10-30 标签 PostgreSQL , pg_repack , pg ...
- PostgreSQL 磁盘空间的保护伞 PG_repack VS 表膨胀
PG 最近的使用中,发现这个数据库确确实实是一个无底洞,东西太多了,但学习一样东西都是通过主干和分支的方式来学习,后续的学习其实有的时候是靠自觉和运气. 今天要说的pg_repack,这个插件,如果您 ...
- 关于PostgreSQL空间膨胀的研究
首先,我们先启用一个数据库自带的控件方便对数据情况进行分析 create extension pgstattuple; 然后,还需要一个存储过程方便快速的制造数据 create function f1 ...
- MySQL单表膨胀优化之MyCat分库分表
MySQL的单表达到多少量级时性能会下降?宽表在千万量级,窄表要好一点在1200W左右.但是MySQL单表达到1500W时性能开始急剧下降! 事实上MySQL单表可以存储10亿级数据,只是这时候性能比 ...
- PostgreSQL表的行数统计
PostgreSQL表的行数统计 在很多情况下我们需要知道一个表的记录数有多少.如果你发现你有这样的需求,你还应该问问这样的统计的精确度到底又多高.如果你在做会计报表,你需要非常的精确.如果你做一个网 ...
- 金仓数据库 KingbaseES Sys_repack 解决金仓数据库 KingbaseES 表膨胀的问题
关键字 表膨胀 vacuum 索引膨胀 无锁处理 问题描述 详细描述问题现象,必要时可添加图片.表或索引发生膨胀后,用户可以使用vacuum full重建表,但是vacuum full需要持有排它锁 ...
- postgresql 表分区
postgresql 表分区 背景 一个大表查询性能往往不高, 其原因在于数据加载 data load,扫描数据 table scans ,内存交换 memory swap 等等操作的时间成本会随着数 ...
- Greenplum查看表/库大小、进程、表膨胀处理(sql语句)
查询表相关进程 select a.pid from pg_locks a, pg_class b, pg_stat_activity c where a.relation = b.oid and a. ...
- Postgresql 表bloating 怎么办 ---pg_bloat_check 你造(知道)吗?
基于PG 的原理表膨胀的问题估计现在就算是PG的边缘人士都知道了,这实际上也不是什么缺点, 只是集中和分散的设计理念的不同而已. 但监控表的bloating 那倒是一项必须的工作. 在PG内部通过SQ ...
最新文章
- python利用管道popen调用.exe进行交互
- 如何修改SAP标准数据元素文本
- 【趣话编程】如果张东升是个程序员
- python求n的阶乘_python求n的阶乘
- 7怎样设置禁网_怎样才能提升网站内页的收录?
- c语言网络定向拉取数据,用C模拟了一个http请求,但是recv函数接收的数据不完整且欠安顺序获取信息...
- 美国喜提刷脸登机,官方开心发通告,竟马上引发公民不适
- 和秋叶一起学Excel 阿里云盘
- java获取民族代码
- 【Spark NLP】第 5 章:处理词
- JavaScript高级学习之彩色小球球
- vue-router 如何在新窗口打开页面
- 工单流转 指派 php,第三节 工单的指派和处理
- 2022年京东618店庆活动优惠力度怎么样?
- The Things Network LoRaWAN Stack V3 学习笔记 2.7.1 Web 前端开发调试
- 在 macOS 中如何使用 XPC 实现跨进程通讯?
- Voyager的Roles和Pemissions
- 最新整理Q萌回合手游/青灯奇缘+GM授权后台
- 全网最详细的Gephi安装与使用教程
- 插画喵课程 玫瑰花怎么画教程(详细步骤)
热门文章
- CPU占用率爆满,服务器遭遇挖矿如何排查
- 宏基因组分析步骤Linux,宏基因组--简单流程(代码)
- 黑客逆向破解基础-3:如何识别程序加的什么壳
- ubuntu快捷复制粘贴
- 阿里云数据库与传统数据库有何区别?
- [论文阅读] ICCV2015 Joint Fine-Tuning in Deep Neural Networks for Facial Expression Recognition
- Project中最常用的注意点
- 三肽Gly-Cys-Gly、88440-55-5
- 软件测试简历上的职业技能怎么写,测试工程师岗位个人简历个人技能范文
- SpringCloud微服务项目的api文档聚合