2017-06-28 28 views
2

我已经运行一个完整的真空Postgres的表900万行,我这回:Postgres的真空输出中的可移动性意味着什么?

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可拆卸”是什么意思?为什么我得到:

0 dead row versions cannot be removed yet. 

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

回答

2

由于我对更改行(更新,删除)的知识不多,所以如果其他事务处于使用状态(在相同的物理位置),则保留旧版本,当没有更多事务需要过时版本的该行 - 它变得可移动。

对不起 - 无法找到文档

如果我得到正确清晰的描述 - 可移动通过真空的analyze部分所示,和死行删除,而不是由实际vacuum部分所示。

2

除了别人已经回答了,对此输出日志:

0 dead row versions cannot be removed yet.

当在任何行上执行updatedelete,则创建该行的新版本以便在交易为com时替换先前的版本mitted。在执行更新/删除之前启动的事务可能会继续看到旧行版本(具体取决于transaction isolation级别)。因此,真空不能删除这些版本,直到可以确保它们中的任何一个都不再可见。

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

看到这个related question

相关问题