Skip to content

Тайм-ауты логина

Пересказ статьи Grant Fritchey. Login timeouts


Недавно ко мне обратились по поводу компании, которая столкнулась с множеством тайм-аутов на SQL Server. Меня спросили, как это починить. По этой теме есть множество публикаций, но я обнаружил нечто, чего я нигде не встречал. Этим я и хочу поделиться с вами.

Расширенные события


Вы должно быть знали, что я собираюсь привлечь расширенные события (Extended Events). Конечно. Ну, да. Теперь, если вы поищите “timeout” в событиях, то найдете там тайм-ауты блокировок, тайм-ауты плана выполнения и тому подобные вещи. Это не имеет отношения к тайм-ауту логина. Поэтому ищите “connection” или “log in”. Вы получаете множество информации, но опять никакого отношения к тайм-аутам она не имеет. Фактически лучшая информация находится в process_login_finish. Она включает ошибки входа, но достаточно забавно, что тайм-аут не является завершенным процессом входа. Вот так. Тем не менее, перейдите и прочитайте статью, на которую я ссылался выше (или другие статьи об устранении неполадок при тайм-аутах подключения). Есть одно место, где вы можете увидеть неудачные соединения, это кольцевой буфер (ring buffer).

Итак, ищем по “ring_buffer”, но не находим ничего полезного. Что же делать? Включите канал Debug (отладка).



Затем вы обнаружите, что еще имеется целая куча других событий для рассмотрения. Да, события отладки могут изменяться без уведомления. Некоторые события отладки даже опасно использовать. Я настоятельно рекомендую соблюдать осторожность, прежде чем вы просто начнете ими разбрасываться. Тем не менее, проверим это событие:



Это гласит: connectivity_error_ring_buffer_recorded. Короче, вы можете следовать совету в статье выше и запросить кольцевой буфер.

ИЛИ

Вы можете установить сессию Extended Event и захватывать ошибки по мере их записи в кольцевой буфер. Я могу даже сделать еще лучше. Вы можете убедиться, что захватываются только тайм-ауты:



Прямо здесь в самом низу изображения: type = LoginTimers. Это оно. Ваша сессия могла бы тогда выглядеть так:

CREATE EVENT SESSION ConnectionTimeout
ON SERVER
ADD EVENT sqlserver.connectivity_ring_buffer_recorded
(ACTION
(
sqlserver.client_app_name,
sqlserver.client_hostname,
sqlserver.nt_username,
sqlserver.username
)
WHERE (type = 'LoginTimers')
)
ADD TARGET package0.ring_buffer;

Заключение


Я не могу даже близко утверждать, что это расскажет вам все, что вы хотите знать о тайм-аутах соединения. Тем не менее, это гораздо больше, чем вы знаете сейчас, и вы получаете информацию на лету. Чтобы помочь заказчику, именно это я добавил в Redgate SQL Monitor. Это еще одно место, где расширенные события с блеском выполняют свою работу и дают вам информацию, которую вы просто не сможете получить в другом месте.

Обратные ссылки

Нет обратных ссылок

Комментарии

Показывать комментарии Как список | Древовидной структурой

Нет комментариев.

Автор не разрешил комментировать эту запись

Добавить комментарий

Enclosing asterisks marks text as bold (*word*), underscore are made via _word_.
Standard emoticons like :-) and ;-) are converted to images.

To prevent automated Bots from commentspamming, please enter the string you see in the image below in the appropriate input box. Your comment will only be submitted if the strings match. Please ensure that your browser supports and accepts cookies, or your comment cannot be verified correctly.
CAPTCHA

Form options

Добавленные комментарии должны будут пройти модерацию прежде, чем будут показаны.