Предотвратить тупик в SQL с помощью опции ожидания запроса - PullRequest
0 голосов
/ 16 ноября 2018

Мы используем Amazon RDS для хостинга БД. Недавно мы видели случайные тупики. Мы попытались разрешить его, используя @@LOCK_TIMEOUT, но позже обнаружили, что это только для сеанса, а не на уровне базы данных.

Я нашел эту ссылку

https://docs.microsoft.com/en-us/previous-versions/sql/sql-server-2012/ms175463(v=sql.110)

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

enter image description here

Может кто-нибудь подсказать мне, что использовать, чтобы установить время ожидания блокировки на уровне базы данных, чтобы избежать тупиков. Если что-то из кода может быть достигнуто, то это тоже возможно. Мы используем Entity Framework 4

К вашему сведению: мы проверили профилировщик, нет проблем с запросами, которые могут привести к взаимоблокировке, а может и к параллелизму.

1 Ответ

0 голосов
/ 16 ноября 2018

@@LOCK_TIMEOUT не имеет ничего общего с взаимоблокировками, он определяет только максимальное время , которое пройдет до того, как Microsoft SQL Server попытается заблокировать некоторый ресурс, а затем вернет ошибку блокировки. Ситуация взаимоблокировки означает, что два или более процесса уже заблокировали некоторые ресурсы, но существует циклическая зависимость между двумя или более потоками или процессами для некоторого набора ресурсов .

Следовательно, независимо от значения @@LOCK_TIMEOUT тупиковая ситуация не может быть предотвращена таким образом. Пожалуйста, ознакомьтесь со статьей Анализ тупиков с помощью SQL Server Profiler .

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