max worker threads 选项
使用 max worker threads 选项可以配置 MicrosoftSQL Server 进程可使用的工作线程数。SQL Server 使用 Microsoft Windows 2000 和 Windows Server 2003 操作系统的本机线程服务,从而使一个或多个线程支持 SQL Server 同时支持的每一个网络,另一个线程处理数据库检查点,而线程池则处理所有用户。
max worker threads 选项的用途
当服务器上连接有大量客户端时,线程池有助于优化性能。一般情况下,会为每个查询请求创建一个单独的操作系统线程。但是,当到服务器的连接达到数以百计时,为每个查询请求使用一个线程会占用大量的系统资源。最大工作线程数 (max worker threads) 选项使 SQL Server 可以为更大数量的查询请求创建一个工作线程池,这将提高性能。
计算最大工作线程数
如果 max worker threads 的默认值是 0,则允许 SQL Server 在启动时自动配置工作线程数。对于大多数系统而言,该设置为最佳设置;然而,根据您的系统配置将 max worker threads 设置为特定值有时会提高性能。
下表显示了针对各种 CPU 与 SQL Server 版本的组合自动配置的最大工作线程数。
CPU 数 |
32 位计算机 |
64 位计算机 |
---|---|---|
<= 4 个处理器 |
256 |
512 |
8 个处理器 |
288 |
576 |
16 个处理器 |
352 |
704 |
32 个处理器 |
480 |
960 |
注意 |
---|
我们建议将 1024 作为 32 位 SQL Server 的最大线程数,将 2048 作为 64 位 SQL Server 的最大线程数。 |
当实际的查询请求数量少于最大工作线程数 (max worker threads) 中设置的数量时,每一个线程处理一个查询请求。但是,如果实际的查询请求数量超过了最大工作线程数 (max worker threads) 中设置的数量,SQL Server 会将工作线程集中到池中,这样下一个可用的工作线程就可以处理请求。
从 SQL Server 2000 升级
在 SQL Server 2000 中,最大工作线程数 (max worker threads) 的默认设置为 255。将 SQL Server 2000数据库引擎实例升级到更新的版本后会保留最大工作线程数 (max worker threads) 的配置值。升级时,我们建议将新实例的最大工作线程数 (max worker threads) 值更改为 0,以允许数据库引擎计算最佳线程数。
设置最大工作线程数
max worker threads 选项是一个高级选项。如果使用 sp_configure 系统存储过程来更改该设置,则只有在 show advanced options 设置为 1 时才能更改 max worker threads。新设置在重新启动系统后生效。
注意 |
---|
如果所有工作线程随长时间运行的查询而处于活动状态,SQL Server 可能显示停止响应,直到一个工作线程完成并变成可用。虽然这不是缺点,但有时用户可能并不希望如此。如果进程显示为停止响应并且不再处理新查询,则将使用专用管理员连接 (DAC) 连接到 SQL Server,并关闭此进程。为避免此种情况发生,请增大最大工作线程数。 |