如何在PostgreSQL中查找死元组大小?

7
如何在PostgreSQL中查找死元组大小?我使用pg_dump创建了数据库备份,并将其恢复到其他服务器上。我发现两个数据库的大小差异为5GB。我已验证了表的实时元组和死元组。由于当前数据库中添加了新数据,因此存在行数差异。然而,还原数据库大小存在很大差异。这是什么原因?我还没有对还原的数据库进行vacuum analyze分析。

我发现还原的数据库上没有死元组,这可能是一个原因。因此我想查找死元组的大小。


据我所知,在执行Vacuum操作后,已死元组将被删除,表格可以利用这些空间存储新的行数据。因此,表格中会有一些可用的空闲空间。在恢复数据库时,会创建一个新的表格,并从备份中将数据复制到其中。因此,恢复的数据库不会分配额外的空闲空间。这可能是实际数据库和恢复的数据库之间大小差异的原因。 - Darshan Shah
总的n_livetuples和select count(1) from tablename有所不同。为什么?有任何想法吗? - Darshan Shah
2个回答

9

以下是您需要检查的视图:

select n_live_tup, n_dead_tup, relname from pg_stat_all_tables;  

2
你可以使用扩展程序pgstattuple。它会报告dead_tuple_len。

请问您有示例吗? 我有一个名为 master_db 的数据库,其中有一个名为 radius 的模式。 我该如何检查该模式中的所有表? - Houman

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接