并行查询处理
ps:msdn摘入
概念:并行执行的查询或者索引操作. 当SQL SERVER将交换运算符放入查询执行计划中的时候就变成了并行查询计划.
何为交换运算符:在查询执行计划中提供进程管理、数据再分发和流控制的运算符。
一般包含三个:分别是 Distribute Streams、Repartition Streams 和 Gather Streams 逻辑运算符,其中的一个或多个运算符会出现在并行查询的查询计划的显示计划输出。
Distribute Streams:仅用于并行查询计划。它接收记录的单个输入流,并生成多个输出流。(单输入多输出)
Repartition Streams:处理多个流并生成多个记录流。如果查询优化器使用位图筛选器,则输出流中行的数量将减少。(多输入多输出)
Gather Streams :仅用在并行查询计划中。它处理几个输入流并通过组合这几个输入流生成单个记录输出流。(多输入单输出)
并行处理和串行处理的区别:
1.并行查询执行计划可以使用多个线程。非并行查询使用的串行执行计划仅使用一个线程来实现执行。
2.并行查询的执行必须要具是有多个微处理器 (CPU) 的计算机,非并行查询则不是.
优化器不考虑使用并行执行计划的因素:(满足一个就不使用并行执行计划)
1.查询的串行执行成本并不过高,无需考虑替代的并行执行计划。
2.对于特定的查询,认为串行执行计划快于任何可能的并行执行计划。
3.查询包含无法并行运行的标量运算符或关系运算符。
并行查询使用的实际线程数在查询计划执行初始化时确定,并由计划的复杂程度和并行度确定。
这里提到了一个并行度的概念.SQL server能自动检测最佳并行度。此操作由以下因素决定:
a.SQL Server 是否运行在具有多个微处理器或 CPU 的计算机。
b.可用的线程是否足够:查询或者索引操作时需要一定线程数的,并行查询需要更多。当无法满足并行的线程需要的时候,SQL会自动减少并行度甚至放弃并行执行,改成串行查询.
c.所执行的查询或索引操作的类型:创建索引、重新生成索引或删除聚集索引等索引操作,以及大量占用 CPU 周期的查询最适合采用并行计划。
d.待处理的行数是否足够:如果查询优化器确定行数太少,则不引入交换运算符来分发行。
e.当前的分发内容统计信息是否可用:如果不能达到最高并行度,则在放弃并行计划之前会考虑较低的并行度。
并行度和进程数:如果可以确保并行执行,则数据库引擎将确定最佳线程数,并在这些线程间分配并行计划的执行。
从查询或索引操作开始在多线程上并行执行起,将一直使用相同的线程数,直到操作完成。
每次从过程缓存中检索执行计划时,数据库引擎都将重新检查最佳线程数决策(第一次执行某个查询时最终采用了串行计划,后来第二次执行相同的查询将使用三个线程的并行计划)
并行索引操作:为创建或重新生成索引或删除聚集索引的索引操作而生成的查询计划允许在有多个微处理器的计算机上执行并行、多线程操作。
当 数据库引擎生成一个索引执行计划时,并行操作数将设置为下列各项中的最低值:
1)计算机中的微处理器 (CPU) 数。
2)max degree of parallelism 服务器配置选项中指定的数目。
3)尚未超过为 SQL Server 线程执行的工作的阈值的 CPU 数。