Гость
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Как найти @@OPTIONS (NOCOUNT) для другой (произвольной сессии) / 9 сообщений из 9, страница 1 из 1
21.01.2021, 13:35
    #40037673
Павел677
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как найти @@OPTIONS (NOCOUNT) для другой (произвольной сессии)
Привет всем.

Подскажите как можно получить свойство NOCOUNT для произвольной сессии?

Проблема:
Есть сервер приложения, из которого открыто несколько сотен сессий. Из любой из них может запускаться хранимая процедура (которых много).
Есть подозрение, что в какой-то из хранимок повреждается свойство сессии NOCOUNT что влечет неправильную работу всего приложения (соединения к БД не закрываются после выполнения хранимок, а возвращаются в пул)

Я поискал в документации
https://docs.microsoft.com/ru-ru/sql/t-sql/statements/set-nocount-transact-sql?view=sql-server-ver15
Нашел что для текущей сессии можно определить включенность свойства NOCOUNT так
Код: sql
1.
2.
3.
DECLARE @NOCOUNT VARCHAR(3) = 'OFF';  
IF ( (512 & @@OPTIONS) = 512 ) SET @NOCOUNT = 'ON';  
SELECT @NOCOUNT AS NOCOUNT;



А как простым способом проверить все сессии и найти проблемную ?
Есть какая-то системная вьюха или хранимка.
Нагуглить не получилось.

Ну или не все, а получить свойство NOCOUNT для другой (не текущей) сессии. Дальше уж я сам разберусь.
...
Рейтинг: 0 / 0
21.01.2021, 13:54
    #40037679
invm
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как найти @@OPTIONS (NOCOUNT) для другой (произвольной сессии)
Если nocount установлено на уровне сессии, то повредить его в процедуре невозможно.
Если значение nocount было изменено в процедуре, то оно будет восстановлено после завершения процедуры.
И так не только для процедур, но и для любого вложенного батча.
...
Рейтинг: 0 / 0
21.01.2021, 13:59
    #40037682
Павел677
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как найти @@OPTIONS (NOCOUNT) для другой (произвольной сессии)
invm
Если nocount установлено на уровне сессии, то повредить его в процедуре невозможно.
Если значение nocount было изменено в процедуре, то оно будет восстановлено после завершения процедуры.
И так не только для процедур, но и для любого вложенного батча.


Есть сомнение что это именно так.
По крайней мере гуглится куча советов где выравнивание этого свойства рекомендуется как волшебная пилюля.

https://community.dynamics.com/ax/f/microsoft-dynamics-ax-forum/69323/update-conflict-sysclientsessions
http://axforum.info/forums/showthread.php?p=289455#post289455

Вот я и хочу проверить это.
Можно как-то посмотреть это свойство для других соединений ?
...
Рейтинг: 0 / 0
21.01.2021, 14:29
    #40037690
komrad
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как найти @@OPTIONS (NOCOUNT) для другой (произвольной сессии)
Павел677,

посмотрите sys.dm_exec_plan_attributes
...
Рейтинг: 0 / 0
21.01.2021, 15:05
    #40037697
invm
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как найти @@OPTIONS (NOCOUNT) для другой (произвольной сессии)
Павел677
Есть сомнение что это именно так.
https://docs.microsoft.com/en-us/sql/t-sql/statements/set-statements-transact-sql?view=sql-server-ver15If a SET statement runs in a stored procedure or trigger, the value of the SET option gets restored after the stored procedure or trigger returns control. Also, if you specify a SET statement in a dynamic SQL string that runs by using either sp_executesql or EXECUTE, the value of the SET option gets restored after control returns from the batch that you specified in the dynamic SQL string.
komrad
посмотрите sys.dm_exec_plan_attributes
Там опции, влияющие на построение плана.
NOCOUNT в их число не входит.
...
Рейтинг: 0 / 0
21.01.2021, 15:06
    #40037698
Павел677
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как найти @@OPTIONS (NOCOUNT) для другой (произвольной сессии)
komrad

посмотрите sys.dm_exec_plan_attributes


спс. Что-то не нахожу там упоминаний.

Странно как-то.
sys.dm_exec_requests содержит свойство сессии arithabort и кучу других свойств сессии.
А для NoCount места не нашлось.
...
Рейтинг: 0 / 0
21.01.2021, 15:11
    #40037701
Павел677
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как найти @@OPTIONS (NOCOUNT) для другой (произвольной сессии)
invm
https://docs.microsoft.com/en-us/sql/t-sql/statements/set-statements-transact-sql?view=sql-server-ver15If a SET statement runs in a stored procedure or trigger, the value of the SET option gets restored after the stored procedure or trigger returns control. Also, if you specify a SET statement in a dynamic SQL string that runs by using either sp_executesql or EXECUTE, the value of the SET option gets restored after control returns from the batch that you specified in the dynamic SQL string.



Тогда очень странно.
...
Рейтинг: 0 / 0
21.01.2021, 15:18
    #40037703
Сон Веры Павловны
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как найти @@OPTIONS (NOCOUNT) для другой (произвольной сессии)
Павел677
что влечет неправильную работу всего приложения (соединения к БД не закрываются после выполнения хранимок, а возвращаются в пул)

Ну вообще это стандартное поведение провайдера данных. Вы хотите отключить пулинг сессий?
...
Рейтинг: 0 / 0
21.01.2021, 15:31
    #40037706
Павел677
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как найти @@OPTIONS (NOCOUNT) для другой (произвольной сессии)
Сон Веры Павловны
Павел677
что влечет неправильную работу всего приложения (соединения к БД не закрываются после выполнения хранимок, а возвращаются в пул)

Ну вообще это стандартное поведение провайдера данных. Вы хотите отключить пулинг сессий?


Разве я про это писал ?
Это просто описание как работает система (Axapta 2009)

Мне нужно исправить проблему, которая предположительно связана с порчей свойства сессии NoCount.
А чтобы это проверить, проще всего просмотреть все открытые сессии и для каждой считать это свойство NoCount.
Средствами Аксапты это сделать невозможно. Пул соединений мне недоступен (этим kernel рулит).

Хочу зайти со стороны SQL.
...
Рейтинг: 0 / 0
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Как найти @@OPTIONS (NOCOUNT) для другой (произвольной сессии) / 9 сообщений из 9, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]