我正在对我们的产品执行压力测试,其中将从多个数据库中的分区表和索引更新/删除大量行。我验证了计数,然后执行vacuum
操作。
我观察到死元组的数量等于大多数情况下更新/删除的行数,这是预期的。
pg_stat_get_dead_tuples()
和pgstattuple()
函数都返回了相同数量的死元组。据我所知,前一个函数返回估计的计数和后面的确切计数。
但是在一种情况下,发现死元组的数量小于更新行的数量。
表中更新的元组数为5000000。
pg_stat_get_dead_tuples()
返回5000000作为死元组计数。
但是pgstattuple()
只返回了4999552个计数。
这种行为可能是什么原因?这是预期的吗?
谢谢。
答案 0 :(得分:1)
我认为答案在于HOT +碎片整理。
引自here
仅堆元组(HOT):该功能消除了冗余索引条目 并允许重复使用DELETEd或过时的UPDATEd占用的空间 元组 没有执行全桌真空。它通过允许单页真空吸尘来实现这一点,也称为" defragmentation"。
此外,
碎片整理:... 移动幸存的元组以合并所有 自由空间进入一个洞#34;。