12

After reading Unusual THREADPOOL Waits by Josh Darnell, a Twitter user mentioned there is an undocumented trace flag to prevent trimming idle workers:

tweet

The idea is that once SQL Server has created enough threads to service the peak workload, it should not then trim worker threads (release them to the OS) after 15 minutes or so of them not being needed.

The idle worker threads will continue to use resources (e.g. memory) but there will not be the burst of THREADPOOL waits when more workers are suddenly required. Apparently this can be of assistance when using Always On Availability Groups.

What is this undocumented trace flag, and how does it work?

14

The trace flag is 8061.

It is undocumented, so should only be enabled when suggested by Microsoft support.

The flag needs to be enabled globally (or on start up):

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

SQL Server checks to see if it should trim idle workers in:

sqldk!SchedulerMonitor::CheckScheduler

It skips routine excess worker trimming if trace flag 8061 is set.

Worker trimming is performed by:

sqldk!WorkDispatcher::TrimIdleWorkers

Worker trimming will still be performed if the following memory value is greater than zero:

sqldk!SOS_OS::sm_WorkerPressureCount

Quite rightly, the trace flag will not prevent trimming under all scenarios, but it does work for the purpose expressed in the question.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.