首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MVCC下的关系和关系

MVCC下的关系和关系
EN

Stack Overflow用户
提问于 2022-01-31 19:05:19
回答 1查看 81关注 0票数 0

如果我正确理解,在MVCC(多版本并发控制)下,死元组将留在页面中,直到真空进入并标记为“未使用”为止,直到“真空满”进入并重新组织它们以整理空间--因此我们对相同的数据使用更少的空间。

我有一个表,在一个还没有完成vacuum full的环境中,它有以下几个方面:

代码语言:javascript
复制
SELECT relpages, reltuples from pg_class where relname='pg_toast_16450';
 relpages  |  reltuples
-----------+--------------
 544447814 | 6.394397e+06

在另一个经历了vacuum full的环境中,有:

代码语言:javascript
复制
SELECT relpages, reltuples from pg_class where relname='pg_toast_16450';
 relpages |  reltuples
----------+--------------
  2476625 | 4.439228e+06

看起来relpages会大大降低,这与我的理解是一致的。然而,reltuples没有。(relpages有250倍的变化,而reltuple只有1.33X),这是否意味着reltuples不包括死元组?如果是这样的话,使用reltuples来设计查询计划的查询规划者有办法绕过死元组吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-01-31 19:24:26

reltuples是对表中活行数的估计。正如文献资料所说,

它由真空分析和一些DDL命令(如创建索引 )更新。

所以,如果最后一个这样的命令(可能是由自动真空触发的)已经在表上运行,那么数字a总是会稍微关闭,而VACUUM (FULL)会修复这个问题。

但是,还有第二件事要考虑,因为这是一个TOAST表:它可能包含一些属于表中死行的条目。死行的土司条目不一定是死的,但是VACUUM (FULL)不会复制它们,因此这个数字可以额外地缩小。我怀疑这种情况已经发生,因为这个数字比我预期的减少10%还多。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70931488

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档