Sql-Server

SQL Server 2014 中超過 15000 個休眠會話

  • November 27, 2017

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;

將顯示每個程序每個主機的連接數。這應該足以辨識有問題的應用程序。

您還可以創建一個隨時間記錄此資訊的作業,以繪製出連接是否真的一直在增加的圖表,這樣您就可以向您的應用程序團隊“證明”確實存在洩漏。

引用自:https://dba.stackexchange.com/questions/191760