Sql-Server

防止由於空閒工作執行緒修剪而導致 THREADPOOL 等待

  • August 29, 2020

在閱讀了 Josh Darnell 的Unusual THREADPOOL Waits之後,一位 Twitter 使用者提到有一個未記錄的跟踪標誌來防止修剪空閒的工作人員

鳴叫

這個想法是,一旦 SQL Server 創建了足夠的執行緒來為峰值工作負載提供服務,它就不應該在 15 分鐘左右不需要的工作執行緒之後修剪工作執行緒(將它們釋放到作業系統)。

空閒的工作執行緒將繼續使用資源(例如記憶體),THREADPOOL但當突然需要更多工作人員時不會出現等待的爆發。顯然,這在使用 Always On 可用性組時會有所幫助。

這個未記錄的跟踪標誌是什麼,它是如何工作的?

跟踪標誌是8061

它沒有記錄,因此只能在 Microsoft 支持人員建議時啟用。

該標誌需要全域啟用(或在啟動時):

-- Enable globally
DBCC TRACEON (8061, -1);

SQL Server 檢查它是否應該在以下位置修剪空閒的工作人員:

sqldk!SchedulerMonitor::CheckScheduler

如果設置了跟踪標誌 8061 ,它將跳過例行的多餘工人修整。

工人修整由以下人員執行:

sqldk!WorkDispatcher::TrimIdleWorkers

如果以下記憶體值大於零,仍將執行 Worker 修剪:

sqldk!SOS_OS::sm_WorkerPressureCount

非常正確,跟踪標誌不會阻止在所有情況下進行修剪,但它確實適用於問題中表達的目的。

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