1. Postgresql通过数据多版本实现mvcc,删除数据并不会真正删除数据,
而是修改标识,更新是通过删除+插入的方式进行,所以在频繁更新的系统,数据膨胀是个头疼的问题,如果不进行处理,数据膨胀倍数可能达到十几倍。
2. repack的原理
原理其实和vacuum full是类似的,都是新建一个文件,然后将老文件数据拷贝过来,然后进行文件切换,
它不阻塞读写的秘诀就是新建文件和拷贝的过程是在线做的,在没有完成拷贝之前,原来的文件还是可以读写的,只有在切表那一瞬间可能会有影响。
原理: 新建一个一模一样的影子表,然后拷贝原表的数据,最后rename替换原表。 安装pg_repack:
参考:使用pg_repack 回收表体积 - 云+社区 - 腾讯云 (tencent.com)