如何计算 SQL Server 中的最大工作线程数?

Rau*_*DBA 1 sql-server multi-thread cpu

我使用 64 位操作系统和两个 CPU(每个 CPU 有 7 个逻辑处理器),逻辑处理器总数等于 14。

当我运行此代码时,我得到2048

SELECT max_workers_count FROM sys.dm_os_sys_info
Run Code Online (Sandbox Code Playgroud)

另一方面,当我使用下面的公式时,我得到了完全不同的数字,即672

For a 64-bit operating system:
Total available logical CPUs <= 4
Max Worker Threads = 512
Total available logical CPUs > 4
Max Worker Threads = 512 + ((logical CPUs - 4)*16)
Run Code Online (Sandbox Code Playgroud)

你能向我解释为什么我得到不同的数字吗?我在另一台服务器上对其进行了测试,两种情况的数字都完全相同。

编辑

在此处输入图片说明

PS 感谢 Dan Guzman 建议检查最大工作线程的服务器设置。这就是 EXEC sp_configure 'max worker threads' 返回的内容:

在此处输入图片说明

Dan*_*man 6

似乎有人将最大工作线程数设置更改为非默认值,这将覆盖默认计算值。当前配置的值可以通过以下方式确定:

EXEC sp_configure 'max worker threads';
Run Code Online (Sandbox Code Playgroud)

我要补充的是,有时会错误地将该值设置为解决症状而不是根本原因的下意识反应。文档中列出了配置该值的一些正当理由,但默认计算适用于大多数工作负载。