Sql-Server

導致 THREADPOOL 等待的大量睡眠計數?

  • November 15, 2019

當我sp_whoisactive整天跑步時,我通常會看到我們的伺服器上有大約 500-700 個連接。我們偶爾會遇到 THREADPOOL 等待和高信號等待率(因此我們有時會出現執行緒匱乏)。

但是,這 500-700 個連接中只有 10-25 個處於活動狀態。我不確定在睡眠時SPID是否仍然綁定到執行緒?

這會導致我們的高信號等待率和 THREADPOOL 等待嗎?

我有一種感覺,我們的 3rd 方應用程序沒有正確關閉連接並導致我們出現問題,但在我向他們提出這個問題之前想先檢查一下。謝謝!

我真正想知道的是睡眠會話是否有執行緒?

不,他們沒有,

SQL Server 工作執行緒,也稱為工作執行緒或執行緒,是作業系統執行緒的邏輯表示。執行串列請求時,SQL Server 數據庫引擎將產生一個工作人員來執行活動任務

但實際上並沒有產生一個新的工人,而是一個典型的在池中可用

max worker threads 選項使 SQL Server 能夠創建一個工作執行緒池來服務更多的查詢請求,從而提高性能。

執行緒和任務架構指南 – 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/

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