Убить заблокированный процесс в базе данных - PullRequest
0 голосов
/ 16 марта 2009

Какое лучшее решение, если мы видим много заблокированных процессов в базе данных?

Ответы [ 3 ]

3 голосов
/ 16 марта 2009

Некоторая блокировка нормальна, вопрос в том, вызывает ли блокирование проблемы, мешающие своевременному завершению запросов, или, что еще хуже, вызывает тупики. Что вам нужно сделать, это определить, что вызывает блокировку. У Microsoft было несколько хороших инструментов для устранения этой проблемы.

Этот пост должен начать или здесь

2 голосов
/ 16 марта 2009

WITH (NOLOCK) не обязательно является хорошим вариантом. Это приведет к тому, что запрос вернет незафиксированные чтения. В транзакционной системе это может быть нежелательное поведение.

0 голосов
/ 16 марта 2009

Временное решение

Используйте sp_who, чтобы найти спиды и убить спид (то есть, убить 59, где 59 - это спид процесса блокировки), чтобы убить процесс.

Реальное решение

Это решит проблему, но не остановит ее снова. Для этого вам нужно посмотреть на свой код. Я бы посоветовал вам использовать как минимум БЕЗ БЛОКИРОВКИ для любого выбора, который вы делаете, чтобы уменьшить вероятность блокировок.

Кроме того, вы можете реорганизовать свой код, чтобы получить доступ только к минимальному числу раз. Рассмотрите возможность копирования в временную (# или ##) таблицу, чтобы выполнить детальную обработку, а затем, при необходимости, скопировать обратно в позицию. Это особенно относится к тем случаям, когда целью является подготовка данных для отчетности. Лучше вытащить данные один раз и выполнить дополнительную обработку вдали от основных таблиц.

Если это невозможно, поскольку базовые данные изменяются слишком быстро, или требуется, чтобы изменения применялись для других целей, тогда используйте SQL Service Broker для постановки в очередь асинхронных рабочих элементов. Это может быть использовано для устранения блокировки в зависимости от вашей ситуации.

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