Sql-Server
SQL Server 2014 中超過 15000 個休眠會話
CPU 使用率會定期達到 100%,當我檢查 SP_who2 時,它顯示大約 20000 個會話,其中大部分都在休眠(也在使用 CPU)。
我認為 CPU 負載與睡眠會話有關
應用程序名稱顯示為 Microsoft JDBC。
大多數會話都將“SOS_SCHEDULER_YIELD”顯示為 last_wait_type。重啟 Windows Server 後,CPU 使用率下降,但會話數在增加。
伺服器有 32 個核心。
應用程序團隊告訴他們正在使用一些“連接池”進行連接管理。
如何調查或解決睡眠會話的數量?
該應用程序可能正在洩漏連接。我不知道它們是什麼意思
應用程序團隊告訴他們正在使用一些“連接池”進行連接管理。
但聽起來他們正在嘗試實現自己的連接池系統。
通常,當您呼叫
.open()
而未呼叫.close()
同一連接時,就會發生連接洩漏。由於這通常是一個客戶端問題,我認為您可以從數據庫端做的唯一事情(不是每隔一段時間就殺死它們,但我不建議這樣做)是使用來自的資訊
sys.dm_exec_sessions
來查找洩漏連接的應用程序然後與您的開發人員或供應商交談,以便他們查找有問題的程式碼。例如這個查詢(取自這裡:
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;
將顯示每個程序每個主機的連接數。這應該足以辨識有問題的應用程序。
您還可以創建一個隨時間記錄此資訊的作業,以繪製出連接是否真的一直在增加的圖表,這樣您就可以向您的應用程序團隊“證明”確實存在洩漏。