如何使2个查询使用2个CPU

时间:2012-10-31 09:09:18

标签: sql parallel-processing sql-server-2008 sqlperformance

我查询了以下形状:

A
UNION ALL
B
UNION ALL
C
UNION ALL
D

并希望通过并行调用A,B,C和D来并行化,然后将它们联合在.Net中。这4个查询都读取相同表池中的数据。

我尝试的第一步是在SSMS的一个标签中执行A,在第二个标签中执行B. A和B各持续约1分钟,所以我有时间启动A,然后转到选项卡B并启动它。

但是当我查看CPU使用率时,它停留在13%(我在8核CPU @ Windows上),相当于一个核心的100%。

我的问题: - “锁定”机制是否允许对一组给定表的两个查询并行运行? - 如果可能存在并行性,我是否会通过尝试在两个SSMS选项卡中并行运行A和B来检测它,或者我的测试存在缺陷? - 最终如何才能提高UNION ALL系列的性能?

1 个答案:

答案 0 :(得分:3)

你根本不强迫并行。引擎根据查询成本决定它

请参阅how to run a parallel query on sql server 2008?

在这种情况下,您可以打开4个数据库连接并运行4个查询并附加结果。您将使用.net并行处理然后加入结果集。

但是,在数据库中,UNION几乎总是更有效,更简单。

从同一个表池中读取不会促进或阻止并行性:发布不会阻止其他读者的共享锁。并且数据将被缓存,因此使用的IO更少。

如果每个UNION子句花费的时间太长,那么您还有其他问题,例如索引不佳,旧/无统计,内存太少,查询结构错误,tempdb问题......以及许多其他可能性

<强> TL;博士

修复查询。不要在他们周围工作。