@@ OPTIONS位掩码与DISABLE_DEF_CNST_CHK

时间:2015-07-14 23:42:33

标签: sql-server sql-server-2008 tsql sql-server-2008-r2

我们正在尝试诊断SQL Server 2008和SQL Server 2008 R2上的一些性能问题,这些问题是由于代表用户缓存的错误查询计划但无法在SSMS中完全重现它们,因为我们无法说服SQL用于匹配从sys.dm_exec_plan_attributes返回的应用程序的set_options值255的服务器。 @@ OPTIONS。

@@ OPTIONS位掩码记录在以下MSDN页面中: Configure the user options Server Configuration Option

根据上面的页面,以下SET语句组合应该产生@@ OPTIONS值255:

SET DISABLE_DEF_CNST_CHK ON
SET IMPLICIT_TRANSACTIONS ON
SET CURSOR_CLOSE_ON_COMMIT ON
SET ANSI_WARNINGS ON
SET ANSI_PADDING ON
SET ANSI_NULLS ON
SET ARITHABORT ON
SET ARITHIGNORE ON
SET QUOTED_IDENTIFIER OFF
SET NOCOUNT OFF
SET ANSI_NULL_DFLT_ON OFF
SET ANSI_NULL_DFLT_OFF OFF
SET CONCAT_NULL_YIELDS_NULL OFF
SET NUMERIC_ROUNDABORT OFF
SET XACT_ABORT OFF

但是当你执导时你会收到警告:

Line 1: The option 'DISABLE_DEF_CNST_CHK' is obsolete and has no effect.

PRINT @@OPTIONS返回254而不是255。

显然,当您在SQL事件探查器中看到EXEC sp_reset_connection时,连接池可以对此进行排序,因为我们的应用程序代码都没有实际更改任何SET选项。但是我们当然不能从SSMS调用sp_reset_connection:

  

Msg 208,Level 16,State 9,Procedure sp_reset_connection,Line 1

     

无效的对象名称' sp_reset_connection'。

是否有一个技巧可以让最后一个DISABLE_DEF_CNST_CHK位发挥作用?一个替代选项名称或系统表来调整?

1 个答案:

答案 0 :(得分:1)

我找到了一种设置DISABLE_DEF_CNST_CHK ON的方法,但我不要建议在生产服务器上执行此操作...

建立新连接时,SQL Server将@@ OPTIONS设置为sys.configurations视图中“user options”行存储的值。此值默认为0.您可以使用以下命令检查已配置和正在运行的值:

select * from sys.configurations where name = 'user options'
-- or:
EXEC sp_configure 'user options'

作为具有sysadmin或serveradmin角色的用户,您可以使用以下命令更改以后连接的值:

EXEC sp_configure 'user options', 1
GO
RECONFIGURE
GO

请注意,更改此设置会影响所有以后与服务器的连接,这就是我不要建议在生产服务器上执行此操作的原因。

更改此配置值后,在SSMS中打开一个新连接,使用原始问题中描述的其他SET选项最终将我们带到@@ OPTIONS 255。