node.jsアプリケーションのロード・テストを行っています。ある時点で、私は要求が保留中の状態に達し、ロックされたトランザクションのために私が推測するのが最良です。これは、最後のログ・ステートメントです:ポストグル・トランザクションのロック
SET SESSION TRANSACTION ISOLATION LEVEL REPEATABLE READ;
そしてpg_lock
に私はmode
ExclusiveLock
で、GRANTED = true
ある上記のクエリで4行を持っています。
どこからバグを探し始めますか? このロック要求で、insert
とupdate
の操作が多い場合は、分離レベルをREPEATABLE READ
にする必要がありますか? このような状況をデバッグ/処理する方法はありますか? ロックをタイムアウトさせるメカニズムはありますか?アプリは簡単に/自動的に解放され、それ以上のリクエストはブロックされません。
(私はツールを直接探しているわけではないので):このような状況を監視して見つけ出すツールはありますか? (私はMuninを使いたいと思っていました)
私はnode4sをExpress 4.13.3で使用しており、3.19.3をPostgres 9.4.1 ORMとして後継しています。 PostgreSQLのトランザクションのロック地獄:)
あなたはロックが起こると、なぜ場所を正確に把握しようと多くの時間を過ごすことができると
あなたはをpg_stat_activityととしてpg_locksを確認しましたか?どのような種類のロックがありますか?そして、postgresのログファイルはどうですか?デッドロックが見えますか? –
@FrankHeikens、私はすでに 'pg_stat_activity'をチェックしていますが、疑わしいものは見当たりませんでしたが、正しくチェックする方法がわからないかもしれません。ロックやログファイルの種類については、すでに私の質問でそれを言及しています。 'GRANTED = true'はデッドロックがないことを意味しますか?正しく確認するにはどうすればよいですか? – kasiacode
@FrankHeikensコメントについて、私はこれも見つけられます:前に見たことのない「エラー:同時更新のためにアクセスをシリアル化できませんでした」。私はアプリが停止しているときにそれを殺すと、ログに「ログ:開いているトランザクションとのクライアント接続での予期しないEOF」が数回現れます。 https://www.postgresql.org/docs/9.4/static/transaction-iso.html#XACT-REPEATABLE-READ根本的な原因:この問題は、コードや要件なしですが、それは既知の問題で何伝えるのは難しい – kasiacode