意外发现这两个数据库的 age 很高,用这个看的:
SELECT age(datfrozenxid) FROM pg_database;
最开始所有数据库的 age 都是一样的。
更清晰的:
SELECT datname, age(datfrozenxid)
FROM pg_database
WHERE datname IN ('template0', 'template1');
发现所有数据库的 age 都一样并且很高我就全都手动 vacuum 了一遍。其中 template0 和 template1 的 vacuum 方法是问的 DeepSeek。我都是在练习服务器上搞的。
我用谷歌搜好像有说不需要对 template0 VACUUM FREEZE 的。但是如果变得很高的话也不会出问题吗?我看着两个数据库的 age 是会增的。
再补充点信息。最开始我是问 autovacuum 是解决了 xid 问题还是只是缓解了。DeepSeek 说只是缓解了,还是需要手动看着 SELECT age(datfrozenxid) FROM pg_database; 。如果高到一定程度还是需要手动 vacuum。