pg_stat_user_tables中的n_live_tup和n_dead_tup是什么意思


Answers:


28

这两列是

SELECT pg_stat_get_live_tuples(c.oid) AS n_live_tup
     , pg_stat_get_dead_tuples(c.oid) AS n_dead_tup
FROM   pg_class c;

表示表中活动行和死行(元组)的数量。在手册中
找到这些功能

死行是已删除的行,以后将重新用于INSERTs或UPDATEs(空间,而不是数据)中的新行。一些死行(或保留的可用空间)对于HOT更新(仅堆元组)特别有用,HOT更新可以有效地重用同一数据页中的空间。更多有关HOT的信息:

或者可以通过对表进行死行VACUUM FULL(或者VACUUM如果幸运的话可以清除)或对表进行类似操作,从而相应地缩小物理表。

每当删除或更新一行时,在提交事务之后,所有其他事务都看不到旧行版本。一旦不再有未提交的较早事务,该行将完全消失。这对于PostgreSQL的MVCC模型处理并发是必要

这些只是统计数字postgresql.conf如果您希望统计信息自动更新,则需要启用它们。track_counts但是默认情况下应启用。请记住,统计信息不会立即更新。在手册中阅读更多有关该内容的信息


什么是纯元组?当我发行时SELECT n_live_tup FROM pg_stat_user_tables WHEN relname = 'mytable';为什么显示零?mytable有6行。
Majid Azimi 2012年

@MajidAzimi:我在回答中添加了一些内容。
Erwin Brandstetter 2012年

5
@MajidAzimi如果您想了解有关MVCC和HoT的知识,请查看PGCon'08
dbenhur

@dbenhur:不错的链接!演示文稿做得很好,很容易理解。
Erwin Brandstetter,2012年

@dbenhur链接现在似乎已死。
Aryeh Leib Taurog 2014年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.