postgresvacuum 的行为

问题描述 投票:0回答:1

我尝试清理 790 GB 大小的表:

wento=# VACUUM(详细,分析)public.wento;

信息:清理“wento.public.wento”

信息:完成清理“wento.public.wento”:索引扫描:0

页数:删除 0 页,剩余 19249 页,扫描 727 页(占总数的 3.78%)

元组:0 个已删除,2543622 个保留,5034 个已死亡但尚未删除

可移除截止值:2797274,操作结束时为 18769 个旧 XID

绕过索引扫描:表中的 160 页(占总数的 0.83%)有 638 个死项标识符

平均读取速率:98.195 MB/s,平均写入速率:23.735 MB/s

缓冲区使用情况:622 次命中,724 次未命中,175 次脏污

WAL使用量:175条记录,175张整页图像,1372087字节

系统使用情况:CPU:用户:0.00秒,系统:0.01秒,已用时间:0.05秒

信息:清理“wento.pg_toast.pg_toast_19276” ^C取消请求已发送 错误:由于用户请求而取消语句 上下文:扫描关系“pg_toast.pg_toast_19276”的块 102413194 时

我知道死元组没有被删除,因为有一个长时间运行的事务。 但我想知道为什么它只扫描了 727 页(占总数的 3.78%)?

postgresql vacuum
1个回答
0
投票

VACUUM
通常只扫描自上次迭代以来已接收写入的页面。 说明书:

VACUUM
使用可见性图来确定必须扫描表格的哪些页面。通常,它会跳过没有任何死行版本的页面,即使这些页面可能仍然具有具有旧
XID
值的行版本。

手册中有更多精美印刷。

© www.soinside.com 2019 - 2024. All rights reserved.