如何解决PostgreSQL表-仅数据转储占用表大小的两倍以上
我有一个Postgresql数据库,总大小为1.7TB。其中一张桌子占用了1.6TB的空间。总磁盘空间为1.7TB,因此我的磁盘空间不足。
我无法在其上运行Vacuum,我尝试截断几个表,然后使用可用空间在其他表上运行Vacuum,并能够获得一些空间。但是问题是我无法在占据99%空间的桌子上运行吸尘器。
因此,我尝试进行备份,以便可以截断该表。备份正在运行,备份大小已超过3TB,并且仍在增长。
我是Postgresql的新手,不知道如何处理这种情况。
我有一个用于备份的4TB临时空间,但我担心此备份的增长将超过可用空间。
我们将不胜感激任何帮助/指导。
解决方法
如果没有选择添加更多存储的选项,则可以通过将行逐渐迁移到新表中来处理这种情况。如果尚未分区表,请考虑对其进行分区。
应对情况的最佳方法是添加存储设备,甚至是临时添加。
关于表和备份之间的大小差异,我可以想到两个可能的原因:
-
您没有计算出正确的表大小。吐司表中可能有很多数据。
-
您有很多二进制数据,并且正在备份为文本大小写。如果真是这样,那么二进制数据的每个字节都会扩展为两个十六进制字符。
使用
pg_dump -F c -Z 9 -f dumpfile -t largetable dbname
那会很慢,但是会尽可能地压缩转储。
纯文本转储大于表是完全正常的。例如,integer
占用4个字节,timestamp
占用8个字节,但是它们的文本表示形式可以更大。此外,较大的列值会在磁盘上压缩。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。