データベースで毎日実行しているバッチクエリがあります。ただし、アイドル状態のままになっているようで、何が起こっているのかをデバッグするのが非常に困難です。
クエリは、同時に挿入されるテーブルの集計であり、何らかの問題に関連していると推測しています。(集計は前日のデータに基づいているため、挿入は結果に影響しません。)
手がかり
これは、sqlalchemyを使用してPythonスクリプト内で実行しています。ただし、トランザクションレベルを自動コミットに設定しているので、トランザクション内に物事がラップされるとは思いません。一方、sqlターミナルでクエリを手動で実行しても、クエリがハングすることはありません。
照会することにより
pg_stat_activity
、クエリは最初としてデータベースに入ってきますstate='active'
。おそらく15秒後に、状態が「アイドル」に変わり、さらにxact_start
がに設定されNULL
ます。待機フラグがtrueに設定されることはありません。sqlalchemyのトランザクションレベルの自動コミットを理解する前に、代わりに状態
'idle in transaction'
ではなく状態でハングし'idle'
ます。そして、その変更を行ってからハングする可能性がわずかに少なくなりますか?
私はこれ以上深く掘る準備ができていないように感じます。明確な答えを出さずに、さまざまな状態や関連するpostgres内部についてさらに説明するフィードバックも歓迎します。
COMMIT
、トランザクションを終了するために発行されていないことを意味します。あなたの問題は別の場所デシベル以上かもしれようです。..聞こえる