配置并行索引操作

适用于: SQL Server Azure SQL 数据库 Azure SQL 托管实例

本主题通过使用 SQL Server Management Studio 或 Transact-SQL 在 SQL Server 中定义最大并行度并说明如何修改此设置。

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

注意

并非在 SQL Server 的每个版本中均提供并行索引操作。 有关详细信息,请参阅 SQL Server 2022 的版本及其支持的功能

本主题内容

开始之前

限制和局限

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

  • MAXDOP 索引选项只为指定此选项的查询覆盖 max degree of parallelism 配置选项。 下表列出了可为 max degree of parallelism 配置选项和 MAXDOP 索引选项指定的有效整数值。

    说明
    0 指定服务器根据当前系统工作负荷确定所使用的 CPU 数目。 这是默认值,还是推荐设置。
    1 取消生成并行计划。 操作将以串行方式执行。
    2-64 将处理器的数量限制为指定的值。 根据当前工作负荷,可能使用较少的处理器。 如果指定的值大于可用的 CPU 数量,将使用实际可用的 CPU 数量。
  • 并行索引执行和 MAXDOP 索引选项适用于下列 Transact-SQL 语句:

  • 不能在 ALTER INDEX (...) REORGANIZE 语句中指定 MAXDOP 索引选项。

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

权限

要求具有对表或视图的 ALTER 权限。

使用 SQL Server Management Studio

设置索引的最大并行度

  1. 在对象资源管理器中,单击加号以展开所需的数据库,其中包含您要设置索引最大并行度的表。

  2. 展开 “表” 文件夹。

  3. 单击加号以展开您要设置索引的最大并行度的表。

  4. 展开 “索引” 文件夹。

  5. 右键单击要为其设置最大并行度的索引,然后选择“属性”

  6. “选择页”下,选择 “选项”

  7. 选择 “最大并行度”,然后输入 1 和 64 之间的某个值。

  8. 单击“确定”。

“使用 Transact-SQL”

设置现有索引的最大并行度

  1. “对象资源管理器” 中,连接到 数据库引擎的实例。

  2. 在标准菜单栏上,单击 “新建查询”

  3. 将以下示例复制并粘贴到查询窗口中,然后单击“执行” 。

    USE AdventureWorks2022;   
    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)

创建新索引时指定最大并行度

  1. “对象资源管理器” 中,连接到 数据库引擎的实例。

  2. 在标准菜单栏上,单击 “新建查询”

  3. 将以下示例复制并粘贴到查询窗口中,然后单击“执行” 。

    USE AdventureWorks2022;  
    GO  
    CREATE INDEX IX_ProductVendor_NewVendorID   
    ON Purchasing.ProductVendor (BusinessEntityID)  
    WITH (MAXDOP=8);  
    GO  
    

另请参阅

查询处理体系结构指南
CREATE INDEX (Transact-SQL)
ALTER INDEX (Transact-SQL)
DROP INDEX (Transact-SQL)
ALTER TABLE (Transact-SQL)
ALTER TABLE table_constraint (Transact-SQL)
ALTER TABLE index_option (Transact-SQL)