Sql-Server
導致 THREADPOOL 等待的大量睡眠計數?
當我
sp_whoisactive
整天跑步時,我通常會看到我們的伺服器上有大約 500-700 個連接。我們偶爾會遇到 THREADPOOL 等待和高信號等待率(因此我們有時會出現執行緒匱乏)。但是,這 500-700 個連接中只有 10-25 個處於活動狀態。我不確定在睡眠時
SPID
是否仍然綁定到執行緒?這會導致我們的高信號等待率和 THREADPOOL 等待嗎?
我有一種感覺,我們的 3rd 方應用程序沒有正確關閉連接並導致我們出現問題,但在我向他們提出這個問題之前想先檢查一下。謝謝!
我真正想知道的是睡眠會話是否有執行緒?
不,他們沒有,
SQL Server 工作執行緒,也稱為工作執行緒或執行緒,是作業系統執行緒的邏輯表示。執行串列請求時,SQL Server 數據庫引擎將產生一個工作人員來執行活動任務。
但實際上並沒有產生一個新的工人,而是一個典型的在池中可用
max worker threads 選項使 SQL Server 能夠創建一個工作執行緒池來服務更多的查詢請求,從而提高性能。
你可以從執行中看到
select count(*) from sys.dm_os_workers select count(*) from sys.dm_exec_sessions
因為您的會話通常比工作人員多。
我想他們可以在不活動時綁定到一個執行緒,但如果他們只是坐在那裡,他們不應該導致執行緒池等待。我會看看那些活躍的會話在做什麼。查看它們是否具有“CXPACKET”等待類型,這可能表明這些活動會話正在使用多個執行緒來執行它們的操作。這是一篇關於 CXPACKET 的好文章以及一些故障排除提示:https ://www.mssqltips.com/sqlservertip/2027/a-closer-look-at-cxpacket-wait-type-in-sql-server/