我在一本关注oracle的书中读过关于Parallelism的文章,他们提到你可以做ALTER TABLE Order PARALLEL 3;
之类的问题。我的问题是:
如果我有一个基于搜索检索数据的查询,并且我想为它添加一些并行性,我将如何在Microsoft SQL Server中进行此操作?例如:
ALTER PROC MY_SP
@SOMEPARAMETER NVARCHAR(2000)
AS
SELECT DESCRIPTION
FROM ORDERS
WHERE DESCRIPTION LIKE '%' + @SOMEPARAMETERHERE +'%'
我如何实现此查询的并行性?
注意:请原谅语法错误,它只是我想要实现的一个例子。
答案 0 :(得分:2)
SQL Server并行性由两个值决定,即最大并行度(MAXDOP)和并行度的成本阈值。 MAXDOP可以在服务器级别设置为默认值,您可以使用查询提示。将MAXDOP设置为0意味着SQL Server优化器将考虑使用尽可能多的并行处理,如果查询通过并行度的成本阈值。如果将MAXDOP设置为1,它或多或少会从选项中删除并行性。任何其他数字都可以作为限制,所以如果你有4个处理器,但你将MAXDOP设置为2,那么任何给定的查询只会使用两个(不一定是两个,只有两个)。
真正的踢球者是并行性的成本阈值。默认值为5,坦率地说太低了。并行执行查询是一项非常昂贵的操作,分割线程,处理所有内容,将线程重新聚集在一起,因此您希望它只运行昂贵的查询。对于OLTP系统,我建议将此值提高到40并从那里进行测试。对于报告系统,我还建议将值提高到25并从那一点进行测试。
您的查询,没有JOIN和一个简单的,虽然不可攻击的WHERE子句,可能会有一个非常低的估计成本。它不太可能超过1,但如果您只是想尝试并行性,请查看查询的执行计划以确定其成本是否大于1.如果是,请将成本阈值降低到1并且为查询提供MAXDOP提示。然后,您应该看到并行执行。但请观察它运行的速度和使用的资源数量,并将其与非并行执行进行比较。你想确保它能以积极的方式为你效力。