我使用带有两个 CPU 的 64 位操作系统(每个 CPU 有 7 个逻辑处理器),并且逻辑处理器的总数等于 14。
当我运行此代码时,我得到2048
SELECT max_workers_count FROM sys.dm_os_sys_info
另一方面,当我使用下面的公式时,我得到完全不同的数字,即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)
你能解释一下为什么我得到不同的数字吗?我在另一台服务器上对其进行了测试,两种情况都得到了完全相同的数字。
编辑
PS 感谢 Dan Guzman 提出的检查最大工作线程的服务器设置的建议。这就是 EXEC sp_configure 'max worker threads' 返回的内容:
似乎有人将最大工作线程设置更改为非默认值,这将覆盖默认计算值。当前配置的值可以通过以下方式确定:
我会补充一点,有时会错误地将值设置为解决症状而不是根本原因的下意识反应。文档中列出了配置该值的一些正当理由,但默认计算适用于大多数工作负载。
这个公式对我有用,我有 32 个逻辑核心,512+((32-4)*16) = 960 这正是我得到的
您能否进入任务管理器 -> 性能选项卡 -> CPU,并在此处发布系统中基本 CPU 信息的屏幕截图(套接字、内核、逻辑处理器等)?