Попасть в тупик при использовании запроса на удаление количества строк - PullRequest
1 голос
/ 29 ноября 2011
Set rowcount 50000
declare @i int 
select @i = 1 
 WHILE ( @i > 0 )
    BEGIN
    DELETE table1
    FROM table1 (index index1)
    WHERE
    HIST_Timestamp < '2011/11/26'
    select @i = @@rowcount
    END

Запрос иногда сталкивается с тупиковой ситуацией и завершается .. Не удается выяснить, что происходит не так .. Пожалуйста, помогите мне!

1 Ответ

1 голос
/ 30 ноября 2011

Деблокировка возникает, когда транзакция A блокирует запись, затем должна ждать транзакции B, чтобы разблокировать запись, в то время как транзакция B ожидает записи, уже заблокированной транзакцией A.

Если вы действительно хотите знатьпочему происходит тупик, вы можете сделать это с помощью этой команды: sp_configure "print deadlock information", 1

Создание полезного index для запроса позволяет оператору delete использовать блокировки страниц или строк, улучшая одновременный доступ кТаблица.Если создание index для транзакции удаления невозможно, вы можете выполнить операцию с помощью курсора с частыми инструкциями транзакции фиксации, чтобы уменьшить количество блокировок страницы.

...