本主题定义最大并行度,并说明如何使用 SQL Server Management Studio 或 Transact-SQL 在 SQL Server 2014 中修改此设置。 在运行 SQL Server Enterprise 或更高版本的多处理器计算机上,索引语句可以使用多个处理器来执行与索引语句关联的扫描、排序和索引作,就像执行其他查询一样。 用于运行单个索引语句的处理器数取决于 最大并行度 配置选项、当前工作负荷和索引统计信息。 最大并行度选项确定在并行计划执行中使用的最大处理器数。 如果 SQL Server 数据库引擎检测到系统正忙,则索引作的并行度会在语句执行开始之前自动减少。 如果非分区索引的前导键列具有有限数量的非重复值或每个非重复值的频率显著变化,数据库引擎还可以减少并行度。
注释
并行索引作在每个 SQL Server 版本中都不可用。 有关详细信息,请参阅 SQL Server 2014 各个版本支持的功能。
本主题内容
准备工作:
若要设置最大并行度,请使用:
在您开始之前
局限性与限制
查询优化器使用的处理器数通常提供最佳性能。 但是,创建、重新生成或删除非常大的索引等作会占用大量资源,并且可能会导致在索引作期间其他应用程序和数据库作的资源不足。 出现此问题时,可以通过限制用于索引作的处理器数来手动配置用于运行索引语句的最大处理器数。
MAXDOP 索引选项仅覆盖指定此选项的查询的最大并行度配置选项。 下表列出了可以使用最大并行度配置选项和 MAXDOP 索引选项指定的有效整数值。
价值 DESCRIPTION 0 指定服务器根据当前系统工作负荷确定使用的 CPU 数。 这是默认值和建议的设置。 1 取消生成并行计划。 操作将被串行执行。 2-64 将处理器数限制为指定值。 根据当前工作负荷,可以使用更少的处理器。 如果指定的值大于可用 CPU 数,则使用实际可用的 CPU 数。 并行索引执行和 MAXDOP 索引选项适用于以下 Transact-SQL 语句:
创建索引 (CREATE INDEX)
ALTER INDEX 重建
DROP INDEX (仅适用于聚集索引。)
修改表 添加 索引 约束
修改表删除(聚集索引)约束
不能在 ALTER INDEX REORGANIZE 语句中指定 MAXDOP 索引选项。
如果查询优化器将并行度应用于生成作,则对需要排序的已分区索引作的内存要求可能更大。 并行度越高,内存需求就越大。 有关详细信息,请参阅 Partitioned Tables and Indexes。
安全
权限
需要对表或视图具有 ALTER 权限。
使用 SQL Server Management Studio
在索引上设置最大并行度
在对象资源管理器中,单击加号以展开包含要为其设置索引的最大并行度表的数据库。
展开 表格 文件夹。
单击加号以展开要设置索引最大并行度的表。
展开 “索引” 文件夹。
右键单击要设置最大并行度的索引,然后选择 “属性”。
在 “选择页面”下,选择“ 选项”。
选择 最大并行度,然后在 1 和 64 之间输入一些值。
单击 “确定” 。
使用 Transact-SQL
在现有索引上设置最大并行度
在 “对象资源管理器” 中,连接到某个数据库引擎实例。
在标准栏上,单击“新建查询”。
将以下示例复制并粘贴到查询窗口中,然后单击 执行。
USE AdventureWorks2012; GO /*Alters the IX_ProductVendor_VendorID index on the Purchasing.ProductVendor table so that, if the server has eight or more processors, the Database Engine will limit the execution of the index operation to eight or fewer processors. */ ALTER INDEX IX_ProductVendor_VendorID ON Purchasing.ProductVendor REBUILD WITH (MAXDOP=8); GO
有关详细信息,请参阅 ALTER INDEX (Transact-SQL)。
在新索引上设置最大并行度
在 “对象资源管理器” 中,连接到某个数据库引擎实例。
在标准栏上,单击“新建查询”。
将以下示例复制并粘贴到查询窗口中,然后单击 执行。
USE AdventureWorks2012; GO CREATE INDEX IX_ProductVendor_NewVendorID ON Purchasing.ProductVendor (BusinessEntityID) WITH (MAXDOP=8); GO
有关详细信息,请参阅 CREATE INDEX(Transact-SQL)。