Wir stellen periodisch fest, dass das Erstellen eines GIN-Indexes auf post_search_data zu zahlreichen Lock:relations in der Leistungsübersicht führt. Das Beenden der Sitzung, die diesen Index erstellt, gibt alle blockierten Sitzungen frei. Interessant ist, dass der Index concurrently verwendet, was keine blockierende Operation sein sollte. Ebenso interessant ist, warum er mit temp präfixiert wird.
CREATE INDEX CONCURRENTLY temp_idx_recent_regular_post_search_data ON post_search_data USING GIN(search_data) WHERE NOT private_message AND post_id >= 12431619
Ich habe auch versucht, idle_in_transaction_session_timeout auf 10 Minuten zu reduzieren (ursprünglich auf 1 Tag eingestellt), aber das hat keinen Unterschied gemacht. Hat jemand anderes ein solches Problem gehabt? Wenn ja, wie haben Sie es gelöst?
Unsere Version ist Discourse 2.7.0 und die Postgres-Version ist 13.8. App und DB sind nicht in Docker, sondern einzeln gehostet (EC2, RDS).
Ich kann Ihnen bei dem spezifischen Problem, das Sie ansprechen, nicht helfen, aber gibt es einen Grund, warum Sie eine so alte Discourse-Version verwenden? Je länger Sie warten, desto wahrscheinlicher ist es, dass Sie bei einem Upgrade auf Probleme stoßen. Idealerweise sollten Sie immer auf der neuesten Version sein. Darüber hinaus enthalten Updates gelegentlich Sicherheitspatches.
Ich verwalte eine Website auf ECS mit RDS und habe keine Probleme bemerkt, aber es ist eine aktuelle Version. Es ist schwer zu erraten, was das Problem sein könnte, ohne mehr Details zu Ihrem Setup zu haben.
Im Allgemeinen ist die erste Antwort, wenn jemand ein Problem mit einer sehr alten Version hat, ein Upgrade durchzuführen.