add tag
Paul White
After reading [Unusual THREADPOOL Waits](https://www.joshthecoder.com/2020/08/27/unusual-threadpool-waits.html) by Josh Darnell, a Twitter user [mentioned](https://twitter.com/SirSQL/status/1299038891496751104) there is an undocumented trace flag to **prevent trimming idle workers**:

![topanswers.png](/image?hash=8fd9f10dbf5c3a939e887b447b32aaf91bc805e29efb460b211460ae15fcc970)

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?
Top Answer
Paul White
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.

This room is for discussion about this question.

Once logged in you can direct comments to any contributor here.

Enter question or answer id or url (and optionally further answer ids/urls from the same question) from

Separate each id/url with a space. No need to list your own answers; they will be imported automatically.