我正在运行一个 PostgreSQL 数据库,它有几个存储日志信息的表。此信息仅用于报告目的,如果超过 30 天,则会转储到文件中并从数据库中删除。
可能有数百万行被删除,每次删除后我们都在运行一个 REINDEX。
这是否足够,或者我们还应该运行 VACUUM 或 VACUUM ANALYZE 吗?还是不需要 REINDEX 而我们应该只运行 VACUUM 或 VACUUM ANALYZE?
我们正在使用 PostgreSQL 8.2.3,我认为它不允许自动清空。
我有几个 postgres 8.3 数据库,它们显示出缺乏清理的症状。
我已经检查了配置,它们处于打开 autovacummer 的默认状态。另外,当我启动数据库时,我在我的 postgres 日志中看到“autovacuum 启动器已启动”。
问题是,我从来没有真正看到真空运行。我也从未在日志中看到有关真空发生的任何内容(我应该看到任何内容吗?)
那么如何判断吸尘器是否工作呢?例如,有没有办法查看上次真空完成的时间?更好的是,是否有一些文档可以指点我来回答这个问题?
谢谢!
在启动日志条目中表明 autovacuum 不工作。我查询 pg_stat_user_tables 表并且 last_vacuum 和 last_autovacuum 列是空的,尽管我之前运行过真空查询。将 pgadmin 连接到数据库表明真空不工作。
我在两个 Ubuntu Azure VM 上使用 postgresql。一个VM设置为主,第二个是通过流式传输的复制数据库。在https://www.digitalocean.com/community/tutorials/how-to-set-up-master-slave-replication-on-postgresql-on-an-ubuntu-12-04-vps 中大致描述。
除了 autovacuum 之外,一切似乎都很有效。在启动过程中记录以下错误:
LOG: test message did not get through on socket for statistics collector
LOG: disabling statistics collector for lack of working socket
WARNING: autovacuum not started because of misconfiguration
HINT: Enable the "track_counts" option.
LOG: database system was shut down at 2017-01-19 14:07:13 UTC
DEBUG: checkpoint record is at 38/F6000028
Run Code Online (Sandbox Code Playgroud)
在 postgresql.config 我使用以下设置:
track_counts = on
autovacuum = …
Run Code Online (Sandbox Code Playgroud) 我有一个巨大的(~150 GB)postgresql 数据库,它的性能在过去几周内下降了。为了提高性能,我打算执行FULL VACUUM、CLUSTER和ANALYZE。
我应该按什么顺序执行这些操作?我不介意执行所需的时间,只介意数据库的性能改进。
谢谢,
乌迪
好的,我已经搬到一家新公司,我看到他们在这里有一个 PostgreSQL 数据库来运行 OpenNMS。
我是一个 MySQL 人,对 PostgreSQL 一点也不熟悉,但我至少学会了如何运行psql
和postgres -D
进入单用户模式。
无论如何,OpenNMS 崩溃了。我进入并追踪到 PostgreSQL,给出了这个错误:
WARNING: database "template1" must be vacuumed within 965550 transactions
HINT: To avoid a database shutdown, execute a full-database VACUUM in "template1".
Run Code Online (Sandbox Code Playgroud)
它实际上从 100 万开始,而我已经下降到 965500,如您所见。我已经通过登录单用户 ( postgres -D
) 并完全运行 Vacuum来达到这一点。现在我希望这可以清理它,但结果正好是 55 行:
WARNING: database "template1" must be vacuumed within 938861 transactions
HINT: To avid a database shutdown, execute a full-database VACUUM in "template1".
WARNING: database "template1" must be vacuumed within 938860 transactions …
Run Code Online (Sandbox Code Playgroud) 我最近开始使用 Fedora 25,我正在尝试手动清除日志,但它不起作用。例如:
$ journalctl --disk-usage
Archived and active journals take up 24.0M on disk.
Run Code Online (Sandbox Code Playgroud)
我尝试清除:
$ journalctl --vacuum-size=1M
Vacuuming done, freed 0B of archived journals on disk.
Run Code Online (Sandbox Code Playgroud)
它没有释放任何东西。有任何想法吗?系统是全新安装的,我还没有接触过journald.conf
。谢谢。