Removable 在 Postgres 的真空输出中意味着什么?
What does removable mean in Postgres' vacuum output?
我 运行 对 Postgres table 有 900 万行的完整 VACUUM,我得到了这个:
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.
我的 table 已编入索引并具有主键,但对其执行查询非常慢。
由于我的知识有限,当您更改行(更新、删除)时,如果其他交易(在同一物理位置)正在使用旧版本,则当没有更多交易需要过时版本时,将保留旧版本该行 - 它变得可移动。
抱歉 - 在文档中找不到明确的描述
如果我没看错 - 真空的 analyze
部分显示可移动,实际 vacuum
部分显示死行已删除而不显示。
简单的理解就是,当你更新或删除你的table上的数据时,PostgreSQL不会立即删除它,它只是标记它。 Vacuum 命令作为一个垃圾收集器,它将遍历那些 table 并将其删除以恢复磁盘 space。
您可以在 Wiki 中阅读有关 Vacuum 的文档以获取更多详细信息:
https://wiki.postgresql.org/wiki/Introduction_to_VACUUM,_ANALYZE,_EXPLAIN,_and_COUNT
除了其他人已经回答的内容,关于日志中的输出:
0 dead row versions cannot be removed yet.
当对任何行执行 update
或 delete
时,将创建该行的新版本,以便在事务提交后替换之前的版本。在执行 update/delete 之前开始的事务可能会继续看到旧行版本(取决于 transaction isolation 级别)。因此 vacuum 无法删除这些版本,直到可以确保它们中的 none 将不再可见。
有关这些情况的日志报告:在您的示例中,没有不能删除的行版本,因为它们可能会被其他事务访问。
看到这个 。
我 运行 对 Postgres table 有 900 万行的完整 VACUUM,我得到了这个:
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.
我的 table 已编入索引并具有主键,但对其执行查询非常慢。
由于我的知识有限,当您更改行(更新、删除)时,如果其他交易(在同一物理位置)正在使用旧版本,则当没有更多交易需要过时版本时,将保留旧版本该行 - 它变得可移动。
抱歉 - 在文档中找不到明确的描述
如果我没看错 - 真空的 analyze
部分显示可移动,实际 vacuum
部分显示死行已删除而不显示。
简单的理解就是,当你更新或删除你的table上的数据时,PostgreSQL不会立即删除它,它只是标记它。 Vacuum 命令作为一个垃圾收集器,它将遍历那些 table 并将其删除以恢复磁盘 space。
您可以在 Wiki 中阅读有关 Vacuum 的文档以获取更多详细信息:
https://wiki.postgresql.org/wiki/Introduction_to_VACUUM,_ANALYZE,_EXPLAIN,_and_COUNT
除了其他人已经回答的内容,关于日志中的输出:
0 dead row versions cannot be removed yet.
当对任何行执行 update
或 delete
时,将创建该行的新版本,以便在事务提交后替换之前的版本。在执行 update/delete 之前开始的事务可能会继续看到旧行版本(取决于 transaction isolation 级别)。因此 vacuum 无法删除这些版本,直到可以确保它们中的 none 将不再可见。
有关这些情况的日志报告:在您的示例中,没有不能删除的行版本,因为它们可能会被其他事务访问。
看到这个