在阅读了 Josh Darnell 的Unusual THREADPOOL Waits之后,一位 Twitter 用户提到有一个未记录的跟踪标志来防止修剪空闲的工作人员:
这个想法是,一旦 SQL Server 创建了足够的线程来为峰值工作负载提供服务,它不应该在 15 分钟左右不需要它们之后修剪工作线程(将它们释放到操作系统)。
空闲的工作线程将继续使用资源(例如内存),THREADPOOL
但当突然需要更多工作人员时不会出现等待的爆发。显然,这在使用 Always On 可用性组时会有所帮助。
这个未记录的跟踪标志是什么,它是如何工作的?
跟踪标志是8061。
它没有记录,因此只能在 Microsoft 支持人员建议时启用。
该标志需要全局启用(或在启动时):
SQL Server 检查它是否应该在以下位置修剪空闲的工作人员:
如果设置了跟踪标志 8061 ,它将跳过例行的多余工人修整。
工人修整由以下人员执行:
如果以下内存值大于零,仍将执行 Worker 修剪:
非常正确,跟踪标志不会阻止在所有情况下进行修剪,但它确实适用于问题中表达的目的。