Okay, um darauf zurückzukommen: Alles sieht weiterhin gut aus, Postmaster hat sich drastisch beruhigt und Sidekiq läuft wieder sehr schnell.
Zusammenfassung dessen, was in meinem Szenario funktioniert hat (mit dem Standard-Datenbanknamen ‘discourse’):
cd /var/discourse/
./launcher enter app
sudo -u postgres psql
\c discourse
Anschließend wurden von der Postgres-Konsole aus jeweils die folgenden Befehle ausgeführt. Jeder Befehl benötigt je nach Datenbankgröße etwas Zeit; die ersten beiden verursachen zudem eine hohe CPU-Auslastung:
VACUUM FULL VERBOSE;
REINDEX DATABASE discourse;
VACUUM VERBOSE ANALYZE;
Hinweis: Ich habe erst einen Unterschied bemerkt, nachdem VACUUM VERBOSE ANALYZE; gemäß der Empfehlung von @Falco ausgeführt wurde. Daher waren die ersten beiden Befehle möglicherweise nicht notwendig. Allerdings scheinen die ersten beiden Schlüsselfaktoren gewesen zu sein, um dieses Problem in der Vergangenheit in der vorherigen Version von PostgreSQL zu beheben.
Falls Sie während REINDEX DATABASE discourse; einen Fehler wie ‘ERROR: deadlock detected’ erhalten, versuchen Sie einfach, den Befehl erneut auszuführen, bis er erfolgreich ist. Das ist mir beim letzten Mal (in der vorherigen PostgreSQL-Version) ebenfalls passiert.
Es gibt Empfehlungen, stattdessen eine gleichzeitige Neuindizierung (concurrent reindex) durchzuführen: PostgreSQL 12 update
Beachten Sie jedoch, dass @eboehnisch oben einen Fehler bei der gleichzeitigen Neuindizierung erhielt, siehe oben.