Как контролировать тупики

11

Когда вы начинаете устранять проблемы с блокировками SQL Server 2005/2008 и как? Предупреждение включается SSMS через предупреждение о состоянии производительности SQL Server, объекты-> SQLServer: блокировки, счетчик-> ожидания блокировки / сек, экземпляр: _Total, предупреждение, если счетчик: превышает указанное значение 3. Является ли это упреждающим способом мониторинга? Какова приемлемая стоимость? Я был бы очень признателен за вашу помощь. Спасибо!!!

db7
источник

Ответы:

7

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

Видеть:

Дополнительные ссылки:

Санкар Редди
источник
3

Первое, что нужно сделать, это взглянуть на график тупиков и точно понять, что происходит. Затем вы можете рассмотреть ваши варианты, которые обычно сводятся к следующему: а) изменить приложение, чтобы стандартизировать порядок блокировки объектов (например, если это возможно, учитывая логику приложения, договориться с разработчиками о блокировке таблиц в алфавитном порядке) или b ) посмотреть, действительно ли вы работаете на соответствующем уровне изоляции в каждой транзакции.

Gaius
источник
Согласно stackoverflow.com/a/112256/14731 последовательный порядок блокировки не предотвращает взаимоблокировки.
Гили
3

Я бы пошел с автоматической трассировкой на стороне сервера 2 основных вопроса:

  • длинные запросы (вы устанавливаете длительность для вашей среды)

  • deadlocks - проверьте график Deadlock и цепочку Lock: Deadlock

Вы будете получать файлы трассировки каждый день, и вы сможете отслеживать действие - посмотрите, не вызывает ли какое-либо запланированное событие проблемы. Подробнее о профилировании производства можно узнать в этом вопросе: Использование SQL Profiler для базы данных, которая находится в производстве .

Мэриан
источник
1

System Center Operations Manager (SCOM) с пакетом управления SQL Server может предупредить о тупиках , если включить ведение журнала для сообщения 1205. Вы можете включить его с помощью следующего запроса SQL: EXEC sp_altermessage 1205, 'WITH_LOG', 'true'.

Также см. Мой ответ на вопрос «Почему имя объекта и индексное имя не заполнены в графике взаимоблокировок?» для сценария PowerShell, который я написал, он будет извлекать информацию о взаимоблокировке из буфера событий и записывать графики взаимоблокировок в виде файлов xdl, которые можно открыть в SQL Management Studio 2012 или более поздней версии или просмотреть в блокноте, чтобы увидеть более подробную информацию.

JamieSee
источник