シンJDBCドライバーを使用して、Oracle 11g DBに対してWeblogicで実行されているJavaEEアプリがあります。最近、明確な理由もなく、特定のテーブルへの更新と挿入が停止したり、通常よりもはるかに時間がかかるという一連のインシデントが本番環境で発生しました。これにより、アプリケーションはますます多くの DB 接続を使用し (通常は接続プールでアイドル状態)、DB CPU と同時実行性が急上昇し (OEM で見られるように)、DB 全体が停止しました。これらのインシデントの間、DBA は挿入と更新が停止する理由 (db ロックなし) を見つけることができませんでした。彼らが目にしたのは、多くの「クライアントからの SQL*Net 待機メッセージ」イベントでした。
彼らの理論は、アプリケーション (jdbc クライアント) が、これらのステートメントに対する DB の応答を確認せずに、DB とは関係のない理由で挿入/更新ステートメント中に何らかの形でスタックしたというものです。そして、アプリがこれらのステートメントをますます発行し続け、ますます多くの接続を拘束したという事実が、CPU と同時実行性が急上昇し、DB が応答しなくなった理由でした。
私には確信が持てません。すべてのセッションがクライアントの待機でビジーだった場合、CPU の使用率がこれほど高かったのはなぜでしょうか? これらのインシデントを一貫して再現することができなかったため、ここでは本当に暗闇の中にいます...
誰かがこのようなものを見たことがありますか、またはこれが原因である可能性のあるアイデアや提案を持っていますか?
ありがとう