我最初认为n_dead_tup
和dead_tuple_count
在 PostgreSQL 中给出相同的计数。但他们似乎不是。我不太明白到底是什么区别。
以下是我的观察:
- 创建了一个包含 10k 行的表。
- 更新了所有 10k 行。现在我有 10k 个死元组。
SELECT dead_tuple_count FROM public.pgstattuple('public.vacuum_test');
dead_tuple_count
------------------
10002
select * from pg_stat_get_dead_tuples('18466');
pg_stat_get_dead_tuples
-------------------------
10002
- 我确实在桌子上吸满了吸尘器。正如预期的那样, dead_tuple_count 为 0。
SELECT dead_tuple_count FROM public.pgstattuple('public.vacuum_test');
dead_tuple_count
------------------
0
但从ie仍然是 10002 n_dead_tup
:pg_stat_all_tables
pg_stat_get_dead_tuples('18466')
select * from pg_stat_get_dead_tuples('18466');
pg_stat_get_dead_tuples
-------------------------
10002
我多次重复此过程,并观察到n_dead_tup
每次更新后更新的元组数量都会添加到统计信息中。
那么这里到底在VACUUM
做什么呢?n_dead_tup
和和有什么区别dead_tuple_count
?