可以将MAXD​​OP设置为仅存储过程吗?

时间:2010-09-30 19:34:15

标签: sql-server

我有一个包含许多SELECT命令的存储过程。

不是将OPTION (MAXDOP 8)放在每个select命令的末尾,是否有一种方法可以在存储过程的开头设置它并在最后删除它,而不是在服务器上实际设置它? / p>

离。

sp_configure 'max degree of parallelism', 4
go
reconfigure with override

3 个答案:

答案 0 :(得分:12)

我希望有一种方法可以为proc的范围设置MAXDOP,但我同意没有办法做到这一点。

为了对抗上面的一些建议,使用MAXDOP提示有很多理由,例如在多处理器环境中进行非工作时间索引构建,更新或数据构建,但MAXDOP的设置低于处理器数量在繁忙的“高峰”时段帮助平衡活动,例如正常营业时间。与某些提示(如索引提示)不同,这不会强制您的进程使用更多线程,但如果计划选择,它将使其能够执行此操作。

如果你加倍线程,一些索引构建的执行速度几乎要快两倍,所以有一个真正的好处。

答案 1 :(得分:4)

可悲的是,没有。

您的选项可以使用 sp_configure 'max degree of parallelism'在服务器级别设置,也可以更新存储过程中的每个SELECT语句以使用OPTION (MAXDOP 8)

也就是说,查询选项应该是最后的选择,如果您的查询表现不佳,可能存在潜在的问题。

答案 2 :(得分:2)

幸运的是没有。做这些事情的推荐方法是根本不做。当SQL Server真正选择错误的计划而不是规则时,覆盖查询应该只是罕见的异常。当必须强制执行查询计划时,正确的操作是使用查询计划指南:

最重要的是要了解查询提示是设计时间选项(它们需要代码更改以修改查询)并且滥用它们会大大降低未来的可维护性应用程序(当硬件更改时,或在不同的部署站点上,提示将是错误的)。相比之下,查询计划指南是部署时间选项,它们不需要更改代码,可以根据现场硬件容量和工作负载在每个部署的站点上进行自定义。