首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Postgres的真空输出中,removable意味着什么?

在Postgres的真空输出中,removable意味着什么?
EN

Stack Overflow用户
提问于 2017-06-28 16:02:52
回答 3查看 1.2K关注 0票数 2

我对一个有900万行的Postgres表进行了全真空操作,并得到了以下结果:

代码语言:javascript
复制
INFO:  vacuuming "osm.asp_trs_roads_osm"
INFO:  "asp_trs_roads": found 329992 removable, 9660438 nonremovable row versions in 761738 pages

详细信息:尚不能删除0个死行版本。CPU 8.98s/13.06u秒已过去549.77秒。991788毫秒后查询返回成功,无结果。

"329992可拆卸“是什么意思?为什么我会得到:

代码语言:javascript
复制
   0 dead row versions cannot be removed yet.

我的表是有索引的,并且有主键,但是在它上面执行查询非常慢。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2017-06-28 16:24:42

根据我的一般知识,当您更改行(更新、删除)时,如果其他事务正在使用旧版本(在相同的物理位置),则保留旧版本,当不再有事务需要行的过时版本时-它将变为可删除的。

抱歉-在文档中找不到清晰的描述

如果我没弄错的话--可拆卸的部分由vacuum的analyze部分显示,而死行的移除和不显示则由实际的vacuum部分显示。

票数 2
EN

Stack Overflow用户

发布于 2017-06-28 16:41:53

简单地说,您可以理解,当您更新或删除表中的数据时,PostgreSQL不会立即删除它,而只是标记它。Vacuum命令是一个垃圾收集器,它将遍历这些表并删除它以恢复磁盘空间。

您可以在Wiki中阅读有关Vacuum的文档,了解更多详细信息:

https://wiki.postgresql.org/wiki/Introduction_to_VACUUM,_ANALYZE,_EXPLAIN,_and_COUNT

票数 2
EN

Stack Overflow用户

发布于 2017-09-13 15:12:30

除了其他人已经回答的问题之外,关于日志中的以下输出:

0 dead row versions cannot be removed yet.

当在任何行上执行updatedelete时,将创建该行的新版本,以便在提交事务后替换以前的版本。在执行update/delete之前启动的事务可能会继续看到旧的行版本(取决于transaction isolation级别)。因此,在确保这些版本不再可见之前,vacuum无法删除这些版本。

记录有关这些情况的报告:在您的示例中,没有不能删除的行版本,因为它们可能会被其他事务访问。

请参阅此related question

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

https://stackoverflow.com/questions/44796837

复制
相关文章

相似问题

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