我有一个包含许多SELECT
命令的存储过程。是否可以将MAXDOP设置为存储过程?
而不是把OPTION (MAXDOP 8)
放在每个select命令的末尾,有没有一种方法可以在存储过程开始时将其设置并在结束时将其删除,而无需在服务器上实际设置它?
ex。
sp_configure 'max degree of parallelism', 4
go
reconfigure with override
我有一个包含许多SELECT
命令的存储过程。是否可以将MAXDOP设置为存储过程?
而不是把OPTION (MAXDOP 8)
放在每个select命令的末尾,有没有一种方法可以在存储过程开始时将其设置并在结束时将其删除,而无需在服务器上实际设置它?
ex。
sp_configure 'max degree of parallelism', 4
go
reconfigure with override
不幸的是,没有。
您可以使用 sp_configure 'max degree of parallelism'
将您的选项设置为在服务器级别,或更新存储过程中的每个SELECT语句以使用OPTION (MAXDOP 8)
。
也就是说,查询选项应该是最后的手段,如果您的查询表现不佳,可能存在潜在的问题。
幸运没有。做这种事情的推荐方法是根本不做。当SQL Server真正选择坏计划而不是规则时,覆盖查询应该只是罕见的异常。而当一个查询计划已被强制执行,正确的动作是使用查询计划指南:
需要理解的最重要的事情是查询提示是设计(他们需要代码变化修改查询)和滥用权力大大减少了应用程序(当硬件更改,或者在不同的部署地点的未来可维护性时间选项,提示会错误)。相比之下,查询计划指南是部署时间选项,根据现场硬件容量和工作负载,它们不需要更改代码,并且可以在每个部署的站点上自定义。
用法很少推荐,但我们仍然有它们可用于某种原因,你可能要考虑为什么;)......很抱歉,但这个答案是没有帮助的。 – 2017-11-16 12:46:37
我希望有一种方法可以为proc的范围设置MAXDOP,但我同意没有办法做到这一点。
为了反击上面的一些建议,使用MAXDOP提示有很大的理由,例如在多处理器环境下进行工时之后的索引构建,更新或数据构建,但是MAXDOP设置为低于处理器数量以帮助平衡忙碌的“高峰”时段的活动,例如正常营业时间。与一些提示(如索引提示)不同,这不会强制您的进程使用更多的线程,但是如果计划如此选择,它将使其能够执行此操作。
一些索引构建将执行接近两倍的速度,如果你双倍的线程,所以是一个真正的好处。
[加1]用于识别特定边缘情况此选项是有利的。 – l46kok 2015-03-04 06:58:38
为什么'MAXDOP 8?'你有并行的'最大程度1'在服务器级别?存储过程有什么问题,您觉得需要添加查询选项? – LittleBobbyTables 2010-09-30 20:10:03
您尝试使用此设置更正哪个问题?我怀疑如果你可以发布更多的细节(包括代码),可能会有更好的方法。任何提示的 – 2010-09-30 20:13:21