Что такое хороший инструмент для обнаружения и отслеживания нечастых тупиковых ситуаций на SQL Server? - PullRequest
0 голосов
/ 15 февраля 2011

У нас есть сервер CRM 4, который используется в производстве, и многие задания SSIS синхронизируют данные из внешних источников.У нас также есть довольно большое количество асинхронных рабочих процессов и плагинов синхронизации, которые работают на наших объектах.Время от времени мы получим взаимоблокировки, даже несмотря на то, что мы поместили моментальный снимок чтения, зафиксированный в нашем SQL 2008. Существуют ли какие-либо инструменты, которые мы могли бы указать на нашем сервере sql, и при возникновении взаимоблокировок мы могли бы дать как можно больше информации об этих процессахи текст запроса, который выполняет обработка, которая вызвала взаимоблокировку?

1 Ответ

1 голос
/ 15 февраля 2011

Я использовал SQL Profiler для этого. Настройте его с помощью графов Deadlock и Lock: Deadlock events (в разделе «Блокировки»), а также (мой рекомендуемый набор) столбцов SPID, HostName, ApplicationName, LoginName, DatabaseName, ObjectID, ObjectID2, OwnerId, Type, Mode, StartTime, EndTime, Duration и (что наиболее важно) TextData. Запустите его и дайте ему поработать. Если и когда возникают взаимоблокировки, оба события отслеживают полезную информацию, но одно из них (возможно, график взаимоблокировки) отлавливает и записывает тонну полезной информации в виде XML в столбце Текст. Когда строка (событие) выбрана в графическом интерфейсе Profiler, она отобразит графическое изображение, показывающее некоторую полезную информацию ... но что вы делаете, извлекаете XML из столбца TextData (вырезать и вставить отлично работает) и просмотреть его в своем предпочтении Редактор XML, чтобы увидеть практически все, что вы когда-либо захотите узнать о причинах этого $ *% & тупика.

Конечно, для этого вам нужно, чтобы SQL Profiler непрерывно работал на чьем-то компьютере. Если вам нужно подождать несколько часов или дней, чтобы произошла взаимоблокировка, вам нужно будет настроить трассировку на самом сервере. (Сложная тема, подробности читайте в sp_trace_create в Books Online. SQL Profiler - это на самом деле просто графический интерфейс пользователя поверх вызовов Trace.) Запустите их вручную или, как подсказывает @ Chris.w.mclean, вы можете настроить процедура автозапуска, чтобы запустить его, если вы хотите, чтобы он всегда работал (хотя извлечение данных из постоянно работающей трассировки - еще одна сложная проблема). Я также настроил одноразовое задание агента SLQ для запуска трассировок, когда я хочу, чтобы они запускались (обычно, когда я сплю).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...