我正在尝试在我的 postgresql 9.5 数据库中设置 autovacuum,但表统计信息没有显示这方面的证据。
在 postgresql.conf 中,autovacuum 已经启用:
autovacuum = on
在设置中,另外,我有 ( select * from pg_settings where category like 'Autovacuum'
)
autovacuum on
autovacuum_analyze_scale_factor 0.1
autovacuum_analyze_threshold 50
autovacuum_freeze_max_age 200000000
autovacuum_max_workers 3
autovacuum_multixact_freeze_max_age 400000000
autovacuum_naptime 60
autovacuum_vacuum_cost_delay 20
autovacuum_vacuum_cost_limit -1
autovacuum_vacuum_scale_factor 0.2
autovacuum_vacuum_threshold 50
如果我执行这个查询:
SELECT schemaname, relname,
last_vacuum ,
last_autovacuum ,
last_analyze ,
last_autoanalyze
FROM pg_stat_all_tables
where schemaname = 'cdi'
我得到这个结果:
relname last_vacuum last_autovacuum last_analyze last_autoanalyze aa 11/11/2017 05:56 04/11/2017 03:24 13/11/2017 23:25 bb 09/10/2017 15:01 04/11/2017 03:55 09/10/2017 15:01 抄送 13/09/2017 13:23 04/11/2017 03:55 11/11/2017 04:12 dd 14/09/2017 10:27 04/11/2017 03:55 12/11/2017 17:09 ee 14/09/2017 10:32 04/11/2017 03:00
ff 11/10/2017 09:20 04/11/2017 03:48 13/11/2017 22:19 gg 04/11/2017 03:55
hh 04/11/2017 03:55
二 04/11/2017 03:16 11/11/2017 06:51 ll 04/11/2017 03:16
mm 04/11/2017 03:55
nn 04/11/2017 03:55
oo 04/11/2017 03:55
pp 04/11/2017 03:00
在我看来没有有效的自动真空
有人可以告诉我一种使 autovacuum 发生的方法吗?
这是我的桌子:
顺序扫描 156 顺序元组读取 5448762930 索引扫描 802121339750 获取的索引元组 800736733206 插入的元组 21907385 元组更新 6190434 删除的元组 190337 元组热更新 3958397 活元组 59641911 死元组 703334 堆块读取 13685226418 堆块命中 786803454925 索引块读取 5104418623 索引块命中 3208275818736 Toast 块读取 0 吐司块命中 0 Toast 索引块读取 0 Toast 索引块命中 0 上次真空 2017-10-11 09:20:22.358935+02 最后一次自动清理 最后分析 2017-11-04 03:48:49.753917+01 最后自动分析 2017-11-13 22:19:08.47618+01 真空计数器1 自动真空计数器 0 分析计数器 10 自动分析计数器 3 表大小 6778 MB Toast 表大小 8192 字节 索引大小 3969 MB
Autovacuum 仅在必要时运行:
VACUUM
如果在上次运行后更改或删除了太多行如果有足够旧的行,它们应该被“冻结”以防止由于事务计数器环绕而导致数据丢失。
有关详细信息,请参阅文档。
如果 autovacuum 从未在某些表上运行,那也可能是因为它还没有运行的理由。