如果我理解正确,在 MVCC(多版本并发控制)下,死元组会留在页面中,直到真空进入并将它们标记为“未使用”,直到“真空已满”进入并重新组织它们以对空间进行碎片整理 - - 所以我们为相同的数据使用更少的空间。
我有一张桌子,在一个尚未完成的环境中vacuum full
:
SELECT relpages, reltuples from pg_class where relname='pg_toast_16450';
relpages | reltuples
-----------+--------------
544447814 | 6.394397e+06
在另一个环境中经历过vacuum full
:
SELECT relpages, reltuples from pg_class where relname='pg_toast_16450';
relpages | reltuples
----------+--------------
2476625 | 4.439228e+06
看起来relpages
确实大幅下降,这符合我的理解。然而,reltuples
没有。(relpages 有 250 倍的变化,而 reltuples 只有 1.33 倍)这是否意味着reltuples
不包括死元组?如果是这种情况,reltuples
用于设计查询计划的查询计划器是否有办法解决死元组?