Postgres清理大表
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Postgres清理大表相关的知识,希望对你有一定的参考价值。
产品上线就没有规划表的数据归档、比如落成文件、保存到历史计划,所以清理大表的部分数据是最kuB事情。限制的条件
d+ 查看表的大小,15G左右。
上线配置放开了归档日志。(删除部分数据的时候,归档有可能撑爆你的文件系统)、
实时有交易往这个表里写数据,交易一分钟就超时
首先删除数据,
- 生产保留30天的数据,一天一天删、一年、60天以前、最后时间上算30天最快。
- 因为有数据一直在往里边写数据。而回收空间耗时问题,耗时长会一直insert wait。
做了几种方案的测试。
1)最简单直接的 备份 删除 回收
copy 数据出来
delete 按条件删除数据
vacuum full 表
2)rename表,回导30天数据到新表
alter table rename 旧表 新表名
create table 旧表名
create index 重建索引
copy from 回导新表名表30天数据
最后选择了第一种方案:凌晨三点多操作,交易最少,影响最小。
另外清理方法,提供了两个工具,pg_repack pgcompacttable
https://www.timbotetsu.com/blog/postgresql-bloatbusters/
select * from pg_stat_user_tables where relname =‘t3‘ 可以统计是否需要做操作
n_dead_tup未回收的空间
n_live_tup当前表的数据量
即触发 分析和清理时 表的数据可以维持一个动态平衡。
https://blog.csdn.net/wzyzzu/article/details/50426692
https://my.oschina.net/lcc1990/blog/1934262
这个是创建测试数据的链接,用了一个比较投机的方法,通过物理id移动数据到数据开头。
以上是关于Postgres清理大表的主要内容,如果未能解决你的问题,请参考以下文章