PostgreSQL关系大小不总结

我有一个非常大的表,带有blob字段,称为数据.我试图找出为什么它没有很好地缓存,重复的SELECT很慢:

=> SELECT pg_size_pretty(pg_total_relation_size('data'));
157 GB

这看起来有点大,所以我试着总结数据:

=> SELECT pg_size_pretty(pg_relation_size('data'));
19 GB

随着指数:

SELECT pg_size_pretty(pg_relation_size('data_pkey'));
757 MB   
SELECT pg_size_pretty(pg_relation_size('data_file_end_date_idx'));
766 MB   
SELECT pg_size_pretty(pg_relation_size('data_file_end_date_idx'));
766 MB
SELECT pg_size_pretty(pg_relation_size('data_merged_idx'));
854 MB
SELECT pg_size_pretty(pg_relation_size('data_owner_idx'));
794 MB
SELECT pg_size_pretty(pg_relation_size('data_session_format_idx'));
779 MB

数据和索引大小的总和约为26 GB,但总关系大小接近160 GB.这个表刚刚从转储中恢复,之后没有写过.

>这种差异的解释是什么?
>有什么方法可以减少浪费的磁盘空间?集群会有帮助吗?

最佳答案
表有任何可变宽度列吗?
如果答案是肯定的,那么您可能错过了吐司表(pg_toast_xxx).你需要找到他们的名字(不知道怎么做,需要谷歌)并计算他们的大小.

减少空间(例如在删除一堆行之后)执行VACUUM FULL并在其后重新索引表(以防止索引碎片).

转载注明原文:PostgreSQL关系大小不总结 - 代码日志