并行查询处理

SQL Server 为具有多个微处理器 (CPU) 的计算机提供了并行查询,以优化查询执行和索引操作。由于 SQL Server 可以使用多个操作系统线程并行执行查询或索引操作,因此,可以快速有效地完成操作。

在查询优化过程中,SQL Server 将查找可能会受益于并行执行的查询或索引操作。对于这些查询,SQL Server 会将交换运算符插入查询执行计划中,以便为查询的并行执行做准备。交换运算符是在查询执行计划中提供进程管理、数据再分发和流控制的运算符。交换运算符包含作为子类型的 Distribute StreamsRepartition StreamsGather Streams 逻辑运算符,其中的一个或多个运算符会出现在并行查询的查询计划的显示计划输出中。

插入交换运算符之后,结果便为并行查询执行计划。并行查询执行计划可以使用多个线程。非并行查询使用的串行执行计划仅使用一个线程来实现执行。并行查询使用的实际线程数在查询计划执行初始化时确定,并由计划的复杂程度和并行度确定。并行度确定要使用的最大 CPU 数;它并不表示要使用的线程数。并行度的值在服务器级别设置,并可使用 sp_configure 系统存储过程进行修改。通过指定 MAXDOP 查询提示或 MAXDOP 索引选项,可以针对单个查询语句或索引语句覆盖此值。

如果下列情况之一为真,则 SQL Server 查询优化器不会针对查询使用并行执行计划:

  • 查询的串行执行成本并不过高,无需考虑替代的并行执行计划。

  • 对于特定的查询,认为串行执行计划快于任何可能的并行执行计划。

  • 查询包含无法并行运行的标量运算符或关系运算符。某些运算符可能会导致查询计划的一部分以串行模式运行,或者导致整个计划以串行模式运行。