max worker threads 选项

使用 max worker threads 选项可以配置 Microsoft SQL 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 的最大线程数。

当实际的查询请求数量少于最大工作线程数 (max worker threads) 中设置的数量时,每一个线程处理一个查询请求。但是,如果实际的查询请求数量超过了最大工作线程数 (max worker threads) 中设置的数量,SQL Server 会将工作线程集中到池中,这样下一个可用的工作线程就可以处理请求。

从 SQL Server 2000 升级

SQL Server 2000 中最大工作线程数的默认设置是 255。将 SQL Server 2000 数据库引擎实例升级到高版本会保留最大工作线程数的配置值。升级时,我们建议将新实例的最大工作线程数 (max worker threads) 值更改为 0,以允许数据库引擎计算最佳线程数。

设置最大工作线程数

max worker threads 选项是一个高级选项。如果使用 sp_configure 系统存储过程来更改该设置,则仅当 show advanced options 设置为 1 时才可以更改 max worker threads。为使新的设置生效,必须重新启动系统。

注意注意

如果所有工作线程随长时间运行的查询而处于活动状态,SQL Server 可能显示停止响应,直到一个工作线程完成并变成可用。虽然这不是缺点,但有时用户可能并不希望如此。如果进程显示为停止响应并且不再处理新查询,则将使用专用管理员连接 (DAC) 连接到 SQL Server,并关闭此进程。为避免此种情况发生,请增大最大工作线程数。