2012-02-26 68 views
1

我已经在Oracle集中的书,他们提到,你可以这样做ALTER TABLE Order PARALLEL 3;了解并行我的问题是:并行查询处理在一个特定的存储过程

如果我不得不根据数据检索查询搜索,我想添加一些并行性,我怎么会在Microsoft SQL Server?例如:

ALTER PROC MY_SP 
@SOMEPARAMETER NVARCHAR(2000) 
AS 

    SELECT DESCRIPTION 
    FROM ORDERS 
    WHERE DESCRIPTION LIKE '%' + @SOMEPARAMETERHERE +'%' 

我该如何实现此查询的并行性?

NOTE:如果语法错误,请原谅,它只是我想达到的一个例子。

+1

我想你想阅读有关[MAXDOP](http://blog.sqlauthority.com/2010/03/15/sql-server-maxdop-settings-to-limit-query-to-run-on-特定CPU /) – 2012-02-26 05:27:05

+1

你应该相信优化 - 如果想使用并行,这将(无可否认,它在使用并行查询是相当糟糕,但它已经变得越来越好) – 2012-02-26 06:36:53

回答

2

SQL Server的并行由两个值来确定,该最大并行度(MAXDOP)和并行的成本阈值。 MAXDOP可以在服务器级别设置为默认值,您可以使用查询提示。将MAXD​​OP设置为0意味着如果查询通过并行度成本阈值,SQL Server优化器将考虑尽可能多地使用并行进程。如果将MAXD​​OP设置为1,则它或多或少地消除了选项中的并行性。任何其他数字都可以作为限制,所以如果你有,例如4个处理器,但是你将MAXD​​OP设置为2,那么对于任何给定的查询(只有两个不一定相同),将只使用两个。

真正的踢球者是并行的成本阈值。默认值是5,这太坦率了。并行执行查询是一项非常昂贵的操作,它将线程拆分,处理所有内容,将线程收集在一起,因此您只需要在昂贵的查询上运行这些线程。对于OLTP系统,我建议将此值提高到40并从此处进行测试。对于一个报告系统,我也建议将这个值提高到25并从这个点进行测试。

您的查询,没有连接和一个简单的,尽管非sargeable,WHERE子句,很可能将有一个非常低的估计成本。这是不可能的,它会超过1,但如果你只是想并行进行实验,看看在执行计划的查询,以确定它是否成本大于1.如果是,降低您的成本阈值下降到1为查询提供MAXDOP提示。你应该看到并行执行。但要观察它的运行速度以及它使用的资源的数量,并将其与非并行执行进行比较。你想确保它会以积极的方式为你工作。

相关问题