1

Похоже, что несмотря на то, что мы вообще не используем транзакции, мы получаем случайную ошибку тупика от SQL Azure.DeadLock на базе базы данных Azure без транзакций

Не существует ли транснациональной ситуации, когда SQL Azure может попасть в тупик?

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

Все обновления по id и обновлению одной строки.

+1

Я не думаю, что не использование транзакций уменьшит риск блокировки. Я думаю, вы должны предоставить более подробную информацию. –

+0

Каким образом параллельные запросы без транзакций могут попасть в тупик? –

ответ

6

Нет таких вещей, как «не используя транзакции». Всегда есть транзакция, если вы начинаете ее явно или нет. Прочитайте Tracking down Deadlocks in SQL Database, как получить график взаимоблокировки в SQL Azure. Подключение к master и запуск:

SELECT * FROM sys.event_log 
WHERE database_name like '<your db name>' 
AND event_type = 'deadlock'; 

Затем проанализировать тупиковый граф действительно понять причину. Скорее всего, вы делаете сканирование из-за отсутствия индексов.

+0

Вы также можете включить блокировки в свой ответ. Это то, что на самом деле вызывает тупики. Табличные подсказки (WITH NOLOCK) решат большинство проблем (и READ UNCOMMITED). https://msdn.microsoft.com/en-us/library/ms187373.aspx –

+0

@RicardoC Нет, грязные чтения абсолютно не являются ответом. [Грязные чтения возвращают неверные данные] (http://blogs.msdn.com/b/sqlcat/archive/2007/02/01/previously-committed-rows-might-be-missed-if-nolock-hint-is- used.aspx). –

+0

@ RicardoC, если вы хотите устранить взаимоблокировки без понимания причины использования моментального снимка. Например. прочитайте [Deadlocked!] (http://blog.codinghorror.com/deadlocked/) –

2

Когда вы выполняете параллельные транзакции (неявные или явные), вы сталкиваетесь с блокировками. Вероятно, когда вы не сказали никаких транзакций, что означает, что ваши транзакции неявны.

+0

Как может пакет одиночного UPDATE по ID может вызвать тупик? SQL Azure запускает пакет обновлений как неявную транзакцию? –