我有一个查询,它连接6个表,产生800,000行,并将它们插入表中。
我在8核计算机上运行此查询,并且没有运行其他工作负载。运行此查询时,Sql服务仅使用一个CPU核心(使用该CPU 100%),这样查询运行将近4分钟。
如何让我的查询使用所有可用的CPU?
重建统计数据没有帮助。有时候,这个查询使用了所有的CPU并运行得更快。
(该查询还使用了两个标量TSQL函数,但这不应该是一个问题,因为它不是以前的。这些函数只在计算中使用它们的参数,并且它们不访问数据库中的任何表。所以使用这些函数不应该阻止查询的并行化。)
(可能在数据库上启用“读提交的快照隔离”会导致此行为吗?在我打开它之前查询运行正常,并且从那时起它在单个CPU上运行。)
答案 0 :(得分:2)
查看查询计划,可能会让您对正在发生的事情有所了解。 您也可以在此处发布查询及其计划(在文本模式下)以供其他人分析。
尝试强制执行另一个事务隔离级别(SET TRANSACTION ISOLATION LEVEL READ COMMITTED)并比较查询计划 - 它会告诉您更改默认隔离是否会导致问题。
以防万一,您可能需要检查max degree of parallelism选项(可以将其设置为服务器范围的选项,也可以设置为特定查询的MAXDOP提示)。