并行索引操作

为创建或重新生成索引或删除聚集索引的索引操作而生成的查询计划允许在有多个微处理器的计算机上执行并行、多线程操作。

注意注意

并行索引操作只适用于 SQL Server 2008 Enterprise。

SQL Server 使用与其用于其他查询的算法相同的算法来确定索引操作的并行度(单独运行的总线程数)。索引操作的最大并行度由 max degree of parallelism 服务器配置选项确定。通过在 CREATE INDEX、ALTER INDEX、DROP INDEX 和 ALTER TABLE 语句中设置 MAXDOP 索引选项,可以覆盖单个索引操作的 max degree of parallelism 值。

当 数据库引擎生成一个索引执行计划时,并行操作数将设置为下列各项中的最低值:

  • 计算机中的微处理器 (CPU) 数。

  • max degree of parallelism 服务器配置选项中指定的数目。

  • 尚未超过为 SQL Server 线程执行的工作的阈值的 CPU 数。

例如,在具有 8 个 CPU 的计算机上,而 max degree of parallelism 设置为 6,则为索引操作生成的并行线程数不超过 6 个。如果计算机中的五个 CPU 超过生成索引执行计划时的 SQL Server 工作的阈值,则执行计划将仅指定三个并行线程。

并行索引操作的主要阶段包括:

  • 协调线程快速并随机地扫描表,以估计索引键的分布情况。协调线程建立键的边界,这将创建若干与并行操作度相等的键范围,其中每个键范围所包含的行数都差不多。例如,如果表中有四百万行,并行度为 4,则协调线程确定将行分为四个行集的键值,其中每个行集中包含 1 百万行。如果无法建立足以使用所有 CPU 的键范围,则并行度也将相应降低。

  • 协调线程分派与并行操作度相等的若干线程,并等待这些线程完成它们的工作。每个线程都使用筛选器扫描基表,筛选器只检索键值位于分配给线程的范围内的行。每个线程都为其键范围内的行生成索引结构。在已分区索引的情况下,每个线程将生成指定数目的分区。线程之间不能共享分区。有关如何生成索引的详细信息,请参阅 tempdb 和索引创建

  • 当所有并行线程都完成后,协调线程将索引子单元连接到单个索引中。此阶段只适用于脱机索引操作。

个别 CREATE TABLE 或 ALTER TABLE 语句可以有多个要求创建索引的约束。这些多个索引创建操作连续执行,但每个单独的索引创建操作可以是具有多个 CPU 的计算机上的并行操作。