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清理大表的主要内容,如果未能解决你的问题,请参考以下文章

Postgres:具有(延迟)读写访问权限的大表

pg(node-postgres)是不是自动清理数据

postgres流复制环境下pg_xlog日志优雅的清理

Postgres 9.6 并行 XPath

用 SQL 完全复制一个 postgres 表

Postgres 是不是会在更新时重写整行?