好的,跟进一下:一切看起来仍然正常,postmaster 的负载已大幅下降,sidekiq 的运行速度也再次变得非常快。
总结一下在我的场景中(默认数据库名为 ‘discourse’)有效的方法:
cd /var/discourse/
./launcher enter app
sudo -u postgres psql
\c discourse
然后在 postgres 控制台中依次执行以下命令。每条命令的执行时间取决于数据库大小,前两条命令还会导致 CPU 重度使用:
VACUUM FULL VERBOSE;
REINDEX DATABASE discourse;
VACUUM VERBOSE ANALYZE;
注意:直到按照 @Falco 的建议执行了 VACUUM VERBOSE ANALYZE; 之后,我才察觉到明显变化,因此前两条命令可能并非必要。不过,在上一版本的 PostgreSQL 中,前两条命令似乎是解决该问题的关键 在此处。
如果在执行 REINDEX DATABASE discourse; 时遇到类似 ‘ERROR: deadlock detected’ 的错误,只需重试直到成功即可。我上次(在上一版本的 PostgreSQL 中)也遇到了这种情况。
有一些建议是执行并发重索引(concurrent reindex),而不是上述的重索引操作:PostgreSQL 12 update
但请注意,上面的 @eboehnisch 在执行并发重索引时遇到了错误,详见此处。