Вопрос

Я ищу предложения о том, как отлаживать и устранять проблемы взаимоблокировки в базе данных SQL Server 2000.Мне рекомендовали использовать флаги трассировки 1024 и 3605, которые, как я обнаружил, дают мне следующее:

1024 - этот флаг трассировки возвращает тип блокировок, участвующих в взаимоблокировке, и текущую затронутую команду.

3605 - этот флаг трассировки отправляет выходные данные трассировки в журнал ошибок.

Конкретные хранимые процедуры, таблицы и индексы все еще должны быть раскрыты, поэтому цель состоит в том, чтобы использовать для этого эти флаги трассировки.И тогда оттуда я буду лучше знать, какие индексы нуждаются в настройке, подсказки по блокировке для настройки запросов и возможные ошибки sproc для исправления.

Есть какие-нибудь другие предложения или военные истории со счастливым концом о том, как свести все это к общей проблеме?

Это было полезно?

Решение

Вот библия об устранении тупиковых ситуаций: http://blogs.msdn.com/bartd/archive/2006/09/09/Deadlock-Troubleshooting_2C00_-Part-1.aspx

Другие советы

Очень полезный скрипт для анализа взаимоблокировок: http://www.sommarskog.se/sqlutil/aba_lockinfo.html

Как только вы узнаете, какие инструкции sql используются, анализ кода, несомненно, поможет.Некоторые эмпирические правила проверяют порядок, в котором осуществляется доступ к строкам, и уровень изоляции, используемый для инструкций SQL.Трассировка профилировщика может очень помочь.

В большинстве случаев это происходит из-за того, что читатель пытается получить общую блокировку ресурса, заблокированного исключительно автором.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top