Sql server SQL-MAXDOP-From变量

Sql server SQL-MAXDOP-From变量,sql-server,performance,tsql,Sql Server,Performance,Tsql,由于某些原因,无法从变量设置MAXDOP量。 有办法吗 我不想使用动态SQL DECLARE @int INT = 1 SELECT COUNT(*) AS MyCount FROM dbo.TableName OPTION (MAXDOP @int); 我正在使用SQL Server 2014 更新: 我的疯狂背后还有更多的原因。我们想看看Purchases是如何运行的,如何从表中的值控制MAXDOP,如果它正在杀死服务器,我们想在不更改代码的情况下减少MAXDOP。Hm。常规变量不起作用。

由于某些原因,无法从变量设置MAXDOP量。 有办法吗

我不想使用动态SQL

DECLARE @int INT = 1
SELECT COUNT(*) AS MyCount FROM dbo.TableName
OPTION (MAXDOP @int);
我正在使用SQL Server 2014

更新:
我的疯狂背后还有更多的原因。我们想看看Purchases是如何运行的,如何从表中的值控制MAXDOP,如果它正在杀死服务器,我们想在不更改代码的情况下减少MAXDOP。

Hm。常规变量不起作用。SQLCMD变量不起作用。无法使用动态SQL。。。这次暴行怎么样

DECLARE @testVariable INT = 2;

IF @testVariable = 1 SELECT 1 OPTION (MAXDOP = 1);

IF @testVariable = 2 SELECT 1 OPTION (MAXDOP = 2);

IF @testVariable = 3 SELECT 1 OPTION (MAXDOP = 3);

IF @testVariable = 4 SELECT 1 OPTION (MAXDOP = 4);

或者,您可以直接使用动态SQL。

虽然我认为前面的答案是最合适的,但如果您想避免使用动态SQL,更合适的问题是,为什么您的服务器资源如此之高,以至于您希望或需要减少单个查询的MAXDOP?也许更好的方法是对数据库性能进行基准测试,并优化获取异常数量系统资源的查询或过程

我的疯狂背后还有更多的原因。我们想看看Purchases是如何运行的,如何从表中的一个值控制MAXDOP,如果它正在杀死服务器,我们想在不更改代码的情况下减少MAXDOP

你在描述。您应该将这些查询分类到非关键资源池中,并限制它们可以使用的资源。该链接包含详细信息,因为这是一个冗长的主题

对于记录,有一种方法可以控制不改变SQL文本的查询的DOP::


@hints
仍然是动态SQL。计划指南适用于同一查询文本的每次执行。我认为资源治理在各个方面都是优越的。

MAXDOP更适合在服务器级别设置。在每语句级别动态更改它不是一个好主意…您可能有XY问题…实际问题是什么,而不是您认为的解决方案。。。?不是我的反对票,顺便说一句,“我们需要能够在不同的地区运行MAXDOP”-这不是实际的问题!这是你尝试的解决方案……那些对问题进行降级的人,请解释原因?DV可能来自没有阅读我的降级投票中的问题的人,但如果有xy问题,这就是它。
sp_create_plan_guide   
  @name = N'Guide2',   
  @stmt = N'SELECT COUNT(*) AS MyCount FROM dbo.TableName',  
  @type = N'SQL',  
  @module_or_batch = NULL,   
  @params = NULL,   
  @hints = N'OPTION (MAXDOP 1)';