gpt4 book ai didi

postgresql - 为什么 vacuum full 在 "done"之后等待?

转载 作者:行者123 更新时间:2023-11-29 11:19:42 25 4
gpt4 key购买 nike

我正在一张非常大的 table 上吸尘。

当我运行它时,它说:

bacula=# VACUUM FULL VERBOSE file_partition_19
bacula-# ;
INFO: vacuuming "public.file_partition_19"
INFO: "file_partition_19": found 16242451 removable, 21024161 nonremovable row versions in 900380 pages
DETAIL: 0 dead row versions cannot be removed yet.
CPU 5.14s/14.42u sec elapsed 19.61 sec.
VACUUM
Time: 163784.767 ms
bacula=#

当它执行此操作时,它会很快显示到 CPU 行,然后等待很长时间才能显示最后两行(+ 提示符)。这反射(reflect)在时间差异上 - “经过 19.61 秒”,与 163 秒的“时间:”相比(显示是因为我设置了 \timing on)。

虽然我没有给它们计时,但两次都差不多 - 启动命令,等待 20 秒,然后显示到“CPU”行,然后等待大约 3 分钟,然后打印其余部分。

这正常吗?为什么会这样?

最佳答案

它主要是重建表上的所有索引,它必须这样做,因为基本上“VACUUM FULL”会完全重写表。如果您从表中删除所有索引,则在“CPU”行之后应该几乎没有延迟。

AFAICT,CPU 使用率行由一个通用例程打印,该例程为其他(非 FULL)真空模式完成大部分工作。在“VACUUM FULL”的情况下是没有意义的。

如果您担心它花费的时间太长,我建议您查看 PostgreSQL wiki 中的“When to use VACUUM FULL and when not to”。十分之九的人在使用 VACUUM FULL 时他们实际上不应该使用。

关于postgresql - 为什么 vacuum full 在 "done"之后等待?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41730843/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com