我尝试清理 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%)?
VACUUM
通常只扫描自上次迭代以来已接收写入的页面。 说明书:
使用可见性图来确定必须扫描表格的哪些页面。通常,它会跳过没有任何死行版本的页面,即使这些页面可能仍然具有具有旧VACUUM
值的行版本。XID
手册中有更多精美印刷。