CPU使用率は定期的に100%になり、SP_who2を確認すると、約20000セッションが表示され、ほとんどのセッションがスリープしています(CPUも使用しています)。
CPU負荷はスリープセッションに関連していると思います
アプリケーション名はMicrosoft JDBCとして表示されています。
ほとんどのセッションで、last_wait_typeとして「SOS_SCHEDULER_YIELD」が表示されています。 Windows Serverを再起動した後、CPU使用率は低下していますが、セッション数が増加しています。
サーバーには32コアがあります。
アプリケーションチームは、接続管理に「接続プール」を使用していると伝えています。
スリープセッションの数を調査または解決するにはどうすればよいですか?
アプリケーションはおそらく接続をリークしています。彼らが何を意味するのか私にはわかりません
アプリケーションチームは、接続管理に「接続プール」を使用していると伝えています。
しかし、彼らは彼ら自身の接続プーリングシステムを実装しようとしているように聞こえます。
一般に、同じ接続で.open()
を呼び出さずに.close()
を呼び出した場合、接続リークが発生します。
これは一般的にクライアントの問題であるため、データベース側から実行できる唯一のこと(たまにそれらを強制終了することはできませんが、そうすることはお勧めしません)は、sys.dm_exec_sessions
の情報を使用して見つけることですアプリケーションが接続をリークし、開発者またはベンダーに連絡して、問題のあるコードを検索できるようにします。
たとえば、次のクエリ( here から取得:
select count(*) as sessions,
s.Host_name,
s.Host_process_id,
s.program_name,
db_name(s.database_id) as database_name
from sys.dm_exec_sessions s
where is_user_process = 1
group by Host_name, Host_process_id, program_name, database_id
order by count(*) desc;
プロセスごとのホストごとの接続数が表示されます。これは、問題のあるアプリケーションを識別するのに十分なはずです。
また、時間の経過とともにこの情報をログに記録するジョブを作成して、接続が本当に常に増加しているかどうかをグラフにして、実際にリークがあることをアプリケーションチームに「証明」することもできます。
アプリケーションチームは、接続管理に「接続プール」を使用していると伝えています。
ここでは、3つのことが起こります。
150000のアイドル接続を持つサイズのサーバー上にアプリプールを配置することが論理的に設定されているわけではありません。