Прежде всего, я хотел бы знать, какова фактическая основная причина тупиков в SQL Server 2005. Это связано с тем, что, когда два процесса получают доступ к одной и той же строке в таблице?Как удалить взаимоблокировки в SQL Server 2005?
В любом случае рассмотрим две таблицы _Table_Now_
и _Table_History_
, где обе имеют одинаковую структуру.
Предположим, что имеется одна колонка под названием NAME
.
Таким образом, когда один процесс пытается обновить запись с NAME='BLUE'
в _Table_Now_
, во-первых, нужно положить настоящую строку с NAME='BLUE'
в _Table_History_
затем обновить _Table_Now_
, а также удалить ранее настоящую строку из _Table_History_
.
При удалении происходит взаимоблокировка. Я не понимаю, почему?
Пожалуйста, направляйте меня!
Тупик обычно включает в себя несколько параллельных транзакций. Вы описали одну транзакцию. Каковы другие транзакции, связанные с тупиком? – NPE
Хорошая практика заключается в том, чтобы избежать мертвых блокировок, предоставляя подсказки для каждого запроса, такие как 'with (NOLOCK)' и 'with (ROWLOCK)', для удаления блокировки вы можете убить один из spids с помощью 'kill N', где n - это spid id, который позволит другому продолжить – AbstractChaos
Без дополнительной информации это будет сложно. Вот ссылка о том, как использовать профилировщик SQL для анализа взаимоблокировок http://msdn.microsoft.com/en-us/library/ms188246.aspx –