Pau*_*ite 12 sql-server database-internals wait-types trace-flags
在阅读了 Josh Darnell 的Unusual THREADPOOL Waits之后,一位 Twitter 用户提到有一个未记录的跟踪标志可以防止修剪空闲工人:
这个想法是,一旦 SQL Server 创建了足够的线程来为峰值工作负载提供服务,它就不应该在 15 分钟左右的不需要的工作线程之后修剪工作线程(将它们释放到操作系统)。
空闲的工作线程将继续使用资源(例如内存),但是THREADPOOL当突然需要更多工作线程时,不会出现等待的爆发。显然,这在使用 Always On 可用性组时会有所帮助。
这个未记录的跟踪标志是什么,它是如何工作的?
Pau*_*ite 14
跟踪标志是8061。
它没有记录,因此只有在 Microsoft 支持人员建议时才应启用。
该标志需要全局启用(或在启动时):
-- Enable globally
DBCC TRACEON (8061, -1);
Run Code Online (Sandbox Code Playgroud)
SQL Server 检查是否应该在以下位置修剪空闲的工作线程:
sqldk!SchedulerMonitor::CheckScheduler
Run Code Online (Sandbox Code Playgroud)
如果设置了跟踪标志 8061,它会跳过例行的多余工人修整。
工人修整由以下人员执行:
sqldk!WorkDispatcher::TrimIdleWorkers
Run Code Online (Sandbox Code Playgroud)
如果以下内存值大于零,仍会执行工作器修剪:
sqldk!SOS_OS::sm_WorkerPressureCount
Run Code Online (Sandbox Code Playgroud)
非常正确,跟踪标志不会在所有情况下阻止修剪,但它确实可以用于问题中表达的目的。
| 归档时间: |
|
| 查看次数: |
450 次 |
| 最近记录: |