配置并行索引操作

在运行 SQL Server Enterprise 的多处理器计算机上,索引语句可能会像其他查询那样,使用多个处理器来执行与索引语句关联的扫描、排序和索引操作。用于运行单个索引语句的处理器数是由配置选项 max degree of parallelism、当前工作负荷以及索引统计信息决定的。max degree of parallelism 选项决定了执行并行计划时使用的最大处理器数。如果 SQL Server 数据库引擎检测到系统忙,索引操作的并行度将自动降低,然后再开始执行语句。如果非分区索引的第一个键列包含有限数量的非重复值,或者每个非重复值的出现频率变化较大,数据库引擎也可能会降低并行度。

注意注意

并行索引操作仅在 SQL Server Enterprise Edition、Developer Edition 和 Evaluation Edition 中可用。

查询优化器使用的处理器数量通常能够提供最佳的性能。但是,有些操作(如创建、重新生成或删除很大的索引)占用大量资源,在索引操作期间会造成没有足够的资源供其他应用程序和数据库操作使用。出现此问题时,您可以通过指定 MAXDOP 索引选项并限制用于索引操作的处理器数,手动配置用于运行索引语句的最大处理器数。

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

使用 MAXDOP 索引选项时,与 max degree of parallelism 配置选项一起使用的所有语义规则均适用。有关详细信息,请参阅 max degree of parallelism 选项

当执行带有或不带 LOB_COMPACTION 的 ALTER INDEX REORGANIZE 语句时,max degree of parallelism 值属于单线程操作。不能在 ALTER INDEX REORGANIZE 语句中指定 MAXDOP 索引选项。

联机索引操作

联机索引操作允许在索引操作期间进行并发用户活动。可以使用 MAXDOP 选项来控制专用于联机索引操作的最大处理器数。通过这种方式,可以平衡在索引操作和并发用户之间使用的资源。有关详细信息,请参阅联机执行索引操作

分区索引操作

如果查询优化器将并行度应用于生成操作,则需要排序的已分区索引操作的内存需求可能会很大。并行度越高,内存需求就越大。有关详细信息,请参阅已分区索引的特殊指导原则

示例

下列示例在 ProductVendor 表中创建索引 IX_ProductVendor_VendorID,并将 max degree of parallelism 选项设置为 8。假设服务器有八个或更多处理器,数据库引擎会将执行索引操作时使用的处理器数量限制为八个或少于八个。

USE AdventureWorks;
GO
IF EXISTS (SELECT name FROM sys.indexes
            WHERE name = N'IX_ProductVendor_VendorID')
    DROP INDEX IX_ProductVendor_VendorID ON Purchasing.ProductVendor;
GO
CREATE INDEX IX_ProductVendor_VendorID 
ON Purchasing.ProductVendor (VendorID)
WITH (MAXDOP=8);
GO