2015-07-14 4 views
3

Мы пытаемся диагностировать некоторые проблемы с производительностью как на SQL Server 2008, так и на SQL Server 2008 R2, возникающие из-за плохих планов запросов, которые кэшируются от имени пользователей, но не могут точно воспроизвести их в SSMS поскольку мы не можем убедить SQL Server соответствовать значению set_options приложения 255, которое возвращается из sys.dm_exec_plan_attributes, иначе. @@ОПЦИИ.@@ ОПЦИИ бит-бит против DISABLE_DEF_CNST_CHK

@@ ВАРИАНТЫ битовая маска описана на следующей странице 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 

Но когда вы EXEC, что вы получите предупреждение:

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

И PRINT @@OPTIONS возвращает 254 вместо 255.

Понятно, что Connection Pooling может сортировать это, когда вы видите EXEC sp_reset_connection в SQL Profiler, так как ни один из наших кодов приложений фактически не изменяет никаких параметров SET. Но, конечно, мы не можем назвать sp_reset_connection из SSMS:

Msg 208, Level 16, State 9, процедура sp_reset_connection, линия 1

Неверное имя объекта 'sp_reset_connection'.

Есть ли уловка, чтобы получить последний бит DISABLE_DEF_CNST_CHK? Альтернативное имя параметра или системная таблица для настройки?

+0

Таким образом, вы сузили его к плану и подтвердили SSMS и приложение использует разные планы? – artm

+0

Так кажется. Я предполагаю, что предупреждение правильное и что DISABLE_DEF_CNST_CHK больше не действует. Что мне подсказывает, что 0x01 был заменен другим вариантом, который влияет на формирование плана. – AlwaysLearning

+0

Вы проверили разницу между планами? – artm

ответ

1

Ну я нашел один способ SET DISABLE_DEF_CNST_CHK ON, но я НЕ рекомендуем делать это на сервере ...

Когда новые соединения устанавливаются наборы SQL Server, @@ OPTIONS к значению, сохраненному в строке «Параметры пользователя» в представлении sys.configurations. Это значение по умолчанию 0. Вы можете проверить настроен и запущен значение с:

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

Как пользователь с сисадмина или ServerAdmin роли, которую вы можете изменить значение для будущих соединений с:

EXEC sp_configure 'user options', 1 
GO 
RECONFIGURE 
GO 

Примечание что изменение этого параметра влияет на все будущие подключения к серверу, поэтому I НЕ ДЕЛАЕТ рекомендовать делать это на производственном сервере.

После изменения этого значения конфигурации, а затем открыть новое соединение в SSMS, используя другие параметры SET, как описано в оригинальный вопрос, наконец, получил нас @@ OPTIONS 255.

Смежные вопросы