配置并行索引操作
本主题定义最大并行度,并说明如何使用 SQL Server Management Studio 或 Transact-SQL 在 SQL Server 2014 中修改此设置。 在运行 SQL Server Enterprise 或更高版本的多处理器计算机上,索引语句可以使用多个处理器来执行与索引语句关联的扫描、排序和索引操作,就像其他查询一样。 用于运行单个索引语句的处理器数由 最大并行度 配置选项、当前工作负荷以及索引统计信息决定。 max degree of parallelism 选项决定了执行并行计划时使用的最大处理器数。 如果 SQL Server 数据库引擎 检测到系统忙,索引操作的并行度将自动降低,然后再开始执行语句。 如果非分区索引的第一个键列包含有限数量的非重复值,或者每个非重复值的出现频率变化较大, 数据库引擎 也可能会降低并行度。
注意
在 SQL Server 的各版本中均不提供并行索引操作。 有关详细信息,请参阅 Features Supported by the Editions of SQL Server 2014。
本主题内容
开始之前:
若要设置最大并行度,请使用:
开始之前
限制和局限
查询优化器使用的处理器数量通常能够提供最佳的性能。 但是,有些操作(如创建、重新生成或删除很大的索引)占用大量资源,在索引操作期间会造成没有足够的资源供其他应用程序和数据库操作使用。 出现此问题时,您可以通过限制用于索引操作的处理器数,手动配置用于运行索引语句的最大处理器数。
MAXDOP 索引选项只为指定此选项的查询覆盖 max degree of parallelism 配置选项。 下表列出了可为 max degree of parallelism 配置选项和 MAXDOP 索引选项指定的有效整数值。
值 说明 0 指定服务器根据当前系统工作负荷确定所使用的 CPU 数目。 这是默认值,还是推荐设置。 1 取消生成并行计划。 操作将以串行方式执行。 2-64 将处理器的数量限制为指定的值。 根据当前工作负荷,可能使用较少的处理器。 如果指定的值大于可用的 CPU 数量,将使用实际可用的 CPU 数量。 并行索引执行和 MAXDOP 索引选项适用于以下 Transact-SQL 语句:
CREATE INDEX
ALTER INDEX REBUILD
DROP INDEX(只适用于聚集索引。)
ALTER TABLE ADD (索引) CONSTRAINT
ALTER TABLE DROP (聚集索引) CONSTRAINT
不能在 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)。