powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Как отловить таймаут клиента в процедуре на сервере
35 сообщений из 35, показаны все 2 страниц
Как отловить таймаут клиента в процедуре на сервере
    #39764854
KRS544
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть довольно объемная хранимка на сервере, выполнение которой клиент может не дождаться из-за таймаута.
Возможно ли отловить данное событие в процедуре?

Microsoft SQL Server 2016 (SP1-CU3) (KB4019916) - 13.0.4435.0 (X64) Apr 27 2017 17:36:12 Copyright (c) Microsoft Corporation Enterprise Edition (64-bit) on Windows Server 2016 Standard 6.3 <X64> (Build 14393: ) (Hypervisor)
...
Рейтинг: 0 / 0
Как отловить таймаут клиента в процедуре на сервере
    #39764865
Гавриленко Сергей Алексеевич
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Нет, конечно. Почта России тоже не в курсе, что адресат в некоторых случаях умирает от старости до того, как они доставят ему что-либо.
...
Рейтинг: 0 / 0
Как отловить таймаут клиента в процедуре на сервере
    #39764872
TaPaK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
KRS544,

ихо таймаут отправляет rollback на сервер
...
Рейтинг: 0 / 0
Как отловить таймаут клиента в процедуре на сервере
    #39764877
KRS544
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
т.е. в начале процедуры выставлять какой либо флаг в таблице и смотреть откатятся изменения или нет.
...
Рейтинг: 0 / 0
Как отловить таймаут клиента в процедуре на сервере
    #39764884
Владислав Колосов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
KRS544,

непонятен смысл постановки задачи. Ничего не надо отлавливать на самом деле.
...
Рейтинг: 0 / 0
Как отловить таймаут клиента в процедуре на сервере
    #39764892
invm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
TaPaKихо таймаут отправляет rollback на серверНет.
Будет ли откат зависит от значения xact_abort.
...
Рейтинг: 0 / 0
Как отловить таймаут клиента в процедуре на сервере
    #39764893
KRS544
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Смысл в том, что бы оперативно реагировать на проблемы, возникающие в процессе работы клиентов.
Проще собирать данные с сервера, а не собирать логи с клиентов.
...
Рейтинг: 0 / 0
Как отловить таймаут клиента в процедуре на сервере
    #39764896
Владислав Колосов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
invm,

по моему разумению при таймауте выполнения клиент должен отключить сеанс.
...
Рейтинг: 0 / 0
Как отловить таймаут клиента в процедуре на сервере
    #39764898
aleks222
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
KRS544Есть довольно объемная хранимка на сервере, выполнение которой клиент может не дождаться из-за таймаута.
Возможно ли отловить данное событие в процедуре?

Microsoft SQL Server 2016 (SP1-CU3) (KB4019916) - 13.0.4435.0 (X64) Apr 27 2017 17:36:12 Copyright (c) Microsoft Corporation Enterprise Edition (64-bit) on Windows Server 2016 Standard 6.3 <X64> (Build 14393: ) (Hypervisor)

1. Процедура выполняется ВНЕ транзакции - можно. Запись в табличку в начале и стирание записи в конце процедуры. Проверка оставшихся записей.

2. Процедура выполняется В транзакции и вы готовы слегка поступиться быстродействием. CRL или xp_cmdshell - запись в табличку в начале и стирание записи в конце процедуры.

2. Процедура выполняется В транзакции - запись в табличку в КОНЦЕ. Но нипонятно, как отследить факт запуска? Рази только вести протокол о намерениях: т.е. запускать вне транзакции ДОП. процедуру, которая зарегистрирует намерение запустить нужную, а нужная - сотрет или пометит как исполненное.
...
Рейтинг: 0 / 0
Как отловить таймаут клиента в процедуре на сервере
    #39764901
Фотография Критик
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
aleks222,

Откройте для себя поведение табличных переменных в транзациях, прежде чем рекомендовать xp_cmdshell
...
Рейтинг: 0 / 0
Как отловить таймаут клиента в процедуре на сервере
    #39764906
Владислав Колосов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
KRS544,

нет, сервер баз данных над использовать по назначению, а информацию о дисконнектах собирать либо на слое приложений, если такой есть, либо на самих клиентах, например, через журнал приложения в Windows.

Журналы могут быть переданы на некий агрегатор и эта технология существует в Windows.
...
Рейтинг: 0 / 0
Как отловить таймаут клиента в процедуре на сервере
    #39764912
KRS544
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Владислав Колосов, это демагогия, случаи разные бывают
...
Рейтинг: 0 / 0
Как отловить таймаут клиента в процедуре на сервере
    #39764913
TaPaK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
invmTaPaKихо таймаут отправляет rollback на серверНет.
Будет ли откат зависит от значения xact_abort.
да, правильно, Грубо говоря отправляется "Stop" как в ssms. Возникает событие Attention и при обработке уже всё зависит от
параметров xact_abort.
Можно ловить через EE Attention https://www.red-gate.com/simple-talk/blogs/identifying-client-timeouts/
...
Рейтинг: 0 / 0
Как отловить таймаут клиента в процедуре на сервере
    #39764916
KRS544
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Критик, можно подробнее, как использовать табличные переменные в моем случае?
...
Рейтинг: 0 / 0
Как отловить таймаут клиента в процедуре на сервере
    #39764938
invm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
KRS544как использовать табличные переменные в моем случае?В вашем случае ничто не поможет.
Ибо при клиентском тайм-ауте (или отмене) прекращается выполнение текущего пакета. Т.е. узнать в самой процедуре, что ее вполнение было прервано невозможно.
...
Рейтинг: 0 / 0
Как отловить таймаут клиента в процедуре на сервере
    #39764940
aleks222
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Критикaleks222,

Откройте для себя поведение табличных переменных в транзациях, прежде чем рекомендовать xp_cmdshell

Да я в курсе поведения.
Тока я не в курсе как оно поможет?
...
Рейтинг: 0 / 0
Как отловить таймаут клиента в процедуре на сервере
    #39764951
KRS544
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
invmKRS544как использовать табличные переменные в моем случае?В вашем случае ничто не поможет.
Ибо при клиентском тайм-ауте (или отмене) прекращается выполнение текущего пакета. Т.е. узнать в самой процедуре, что ее вполнение было прервано невозможно.
Да, я это понял. Решения TaPaK и aleks222 вполне устраивают, спасибо.
Просто не могу понять как можно использовать @table
...
Рейтинг: 0 / 0
Как отловить таймаут клиента в процедуре на сервере
    #39764957
Фотография Критик
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
KRS544,

в вашем, наверное, никак )
просто я прочитал рекомендацию вне контекста
...
Рейтинг: 0 / 0
Как отловить таймаут клиента в процедуре на сервере
    #39764960
invm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
KRS544Просто не могу понять как можно использовать @tableДля ваших целей никак.

Лучше расскажите зачем потребовалось отлавливать клиентский тайм-аут в процедуре.
...
Рейтинг: 0 / 0
Как отловить таймаут клиента в процедуре на сервере
    #39764972
KRS544
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
invm, если интересно... каждое выполнение процедуры логируется (что то типа билинга), если не отлавливать таймауты, то данные на клиенте и сервере не сойдутся.
...
Рейтинг: 0 / 0
Как отловить таймаут клиента в процедуре на сервере
    #39764976
TaPaK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
KRS544invm, если интересно... каждое выполнение процедуры логируется (что то типа билинга), если не отлавливать таймауты, то данные на клиенте и сервере не сойдутся.
делать всё это с клиента не вызывает никаких затруднений
...
Рейтинг: 0 / 0
Как отловить таймаут клиента в процедуре на сервере
    #39764979
TaPaK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
хотя как получается
автор данные на клиенте и сервере не сойдутся.
не ясно. Откатывайте на сервере и на клиенте(?)
...
Рейтинг: 0 / 0
Как отловить таймаут клиента в процедуре на сервере
    #39764984
invm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
KRS544каждое выполнение процедуры логируетсяВызов процедуры или именно успешное выполнение?
...
Рейтинг: 0 / 0
Как отловить таймаут клиента в процедуре на сервере
    #39765011
KRS544
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
invm, получается вызов. За клиент я не отвечаю, поэтому сложно говорить, что там происходит.
...
Рейтинг: 0 / 0
Как отловить таймаут клиента в процедуре на сервере
    #39765023
invm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
KRS544,

Если вызов, то проще всего выполнением логирующей процедуры через self linked server с remote proc transaction promotion = false
...
Рейтинг: 0 / 0
Как отловить таймаут клиента в процедуре на сервере
    #39765034
Владислав Колосов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
KRS544,

Вы лихо выносите оценки собеседнику даже не понимая, о чем идет речь. Контроль таймаутов возможен только со стороны инициатора отключения.
...
Рейтинг: 0 / 0
Как отловить таймаут клиента в процедуре на сервере
    #39765056
aleks222
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
invmKRS544,

Если вызов, то проще всего выполнением логирующей процедуры через self linked server с remote proc transaction promotion = false
Нафига эти сложности?

Судя по всему, тредстартеру на так уж важно, чтобы процедура отработала "сей секунд". "+-Полчаса" ничего не решают.

В этом варианте, правильнее записывать параметры вызова и фсе.
После чего асинхронно выполнять процедуру Агентом.
...
Рейтинг: 0 / 0
Как отловить таймаут клиента в процедуре на сервере
    #39765063
KRS544
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Владислав Колосов, уже выяснили что это не так, хотя бы используя Extended Event.
Никакие оценки никому не выносил, а разговоры типа - зачем вам это нужно делать, делайте это на клиенте, или, цитирую "Ничего не надо отлавливать на самом деле." считаю демагогией. Вы ведь не в курсе, что клиента делает сторонний вендор, каждая доработка стоит денег, не забываем также про подготовку ФТ, ТЗ, закладку бюджета и всей прочей бюрократии.
И соотнося все это с решением, которое предложил aleks222, как думаете, что проще сделать?
...
Рейтинг: 0 / 0
Как отловить таймаут клиента в процедуре на сервере
    #39765065
TaPaK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
KRS544,

проще, в начале и в конце писать состояние, всё что с состоянием != конечному было с ошибкой
...
Рейтинг: 0 / 0
Как отловить таймаут клиента в процедуре на сервере
    #39765067
KRS544
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
TaPaK, так в итоге и решили сделать
...
Рейтинг: 0 / 0
Как отловить таймаут клиента в процедуре на сервере
    #39765068
invm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
aleks222Нафига эти сложности?Это очевидно - что бы залогировать вызов, даже в случае отката транзакции.
...
Рейтинг: 0 / 0
Как отловить таймаут клиента в процедуре на сервере
    #39765070
TaPaK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
KRS544,

Можно тудаже писать spid и параллельно логировать таймауты, потом получать причину
...
Рейтинг: 0 / 0
Как отловить таймаут клиента в процедуре на сервере
    #39765145
Фотография Mind
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
TaPaKKRS544,

проще, в начале и в конце писать состояние, всё что с состоянием != конечному было с ошибкойЕсли нет контроля над клиенским приложением, то никто не остановит их обернуть вызов процедуры в транзакцию.
...
Рейтинг: 0 / 0
Как отловить таймаут клиента в процедуре на сервере
    #39765146
Фотография Mind
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
TaPaKinvmпропущено...
Нет.
Будет ли откат зависит от значения xact_abort.
да, правильно, Грубо говоря отправляется "Stop" как в ssms. Возникает событие Attention и при обработке уже всё зависит от
параметров xact_abort.
Можно ловить через EE Attention https://www.red-gate.com/simple-talk/blogs/identifying-client-timeouts/ Это хороший способ, но есть одно но, некоторые операции даже при успешном выполнении почему то вызывают Attention. Например BULK INSERT на определенных версиях .NET. Впринципе их легко отфильтровать учитывая что реальные таймауты обычно будут по длительности около 30 секунд.
Еще вариант - обычный trace с фильтром "error <> 0"
...
Рейтинг: 0 / 0
Как отловить таймаут клиента в процедуре на сервере
    #39765378
Владислав Колосов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Таймаут возникает в высокоуровневом протоколе на стороне инициатора соединения, на транспортном уровне информация такого рода не передаётся. Можно только гадать на стороне слушателя, но никогда не скажешь наверняка - 30 секунд это что, например? Уборщица провода выдернула, таймаут или электропитание выключено?
...
Рейтинг: 0 / 0
35 сообщений из 35, показаны все 2 страниц
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Как отловить таймаут клиента в процедуре на сервере
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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