SQL 2008没有使用top子句执行并行性

时间:2011-11-17 11:35:24

标签: sql sql-server-2008

目前致力于提高一些查询的效率。查看查询计划后,我发现当top子句到位时,SQL没有执行并行性,将查询时间从1-2s增加到几分钟。

有问题的查询是使用带有各种连接和联合的视图,我正在寻找一个普遍的答案/理解为什么会发生这种情况 - 谷歌迄今为止未能成功。

由于

2 个答案:

答案 0 :(得分:2)

你可能知道

通常,SQL Server在以下情况下并行处理查询:

  • 当CPU数量大于活动连接数时。
  • 当查询的串行执行的估计成本高于查询计划阈值时(估计成本是指以串行方式执行查询所需的经过时间(以秒为单位)。)

但是,某些类型的语句不能并行处理,除非它们包含子句。 例如,即使相关查询符合条件,UPDATE,INSERT和DELETE通常也不会并行处理。

但是如果UPDATE或DELETE语句包含WHERE子句,或者INSERT语句包含SELECT子句,则可以并行执行WHERE和SELECT。在这些情况下,更改将连续应用于数据库。

要配置并行处理,只需执行以下操作:

  1. 在“服务器属性”对话框中,转到“高级”页面。
  2. 默认情况下,“最大并行度”设置的值为0,这意味着将自动控制用于并行处理的最大处理器数。实际上,SQL Server使用实际可用处理器数量,具体取决于工作负载。要将用于并行处理的处理器数量限制为设定量(最大为SQL Server支持的最大值),请将“最大并行度”设置更改为大于1的值。值1表示SQL Server不使用并行处理。
  3. 大型复杂查询通常可以从并行执行中受益。但是,仅当为同一查询运行串行计划所需的估计秒数高于并行度成本阈值中设置的值时,SQL Server才会执行并行处理。 使用“服务器属性”对话框的“高级”页面上的“并行度成本阈值”框设置成本估算阈值。您可以使用0到32,767之间的任何值。在单个CPU上,将忽略成本阈值。
  4. 单击“确定”。这些更改会立即应用。您无需重新启动服务器。
  5. 您可以使用存储过程sp_configure配置并行处理。 Transact-SQL命令是:

    exec sp_configure "max degree of parallelism", <integer value>
    exec sp_configure "cost threshold for parallelism", <integer value>
    

    引自Technet文章Configure Parallel Processing in SQL Server 2008

答案 1 :(得分:0)

TOP会自动将查询置于串行(非并行模式)。这是一种限制,无法克服。尝试使用rand值= 1的等级作为TOP函数的可能替代...