Я тестирую свое приложение, мне нужен код, который стабильно имитирует тупик на сайте базы данных (сценарий sql, если это возможно).
Спасибо.
ДОБАВЛЕНО:
sql-server
deadlock
Гарик
источник
источник
Ответы:
Лучший способ - использовать таблицы, которые у вас уже есть. Создайте две таблицы - table-a, table-b. Для теста вы можете даже обновить один и тот же столбец с той же информацией, чтобы не влиять на реальные данные.
Например, UPDATE table_a set ID = ID, где ID = 100;
Откройте две сессии в одной базе данных. На одном, беги
На два запуска
Затем скопируйте операторы обновления в противоположные сеансы и запустите их одновременно. В одном,
В два
Я только что попробовал это сейчас и попал на MS-SQL
источник
Используйте
sp_getapplock
системную хранимую процедуру, чтобы взять все, что нужно для блокировки, в вашем примере кода.Строго говоря, это семафор Дейкстры . Тем не менее, чертовски полезно, хотя
источник
sp_getapplock
не выдаст ошибку. Он будет либо ожидать истечения времени ожидания, либо (если его нет) вернуть-3
( msdn.microsoft.com/en-us/library/ms189823.aspx )Вот еще один метод, похожий на тот, который выложен выше ->
Скрипт для использования в окне запросов № 1
Скрипт для использования в окне запросов № 2
Скрипт для добавления в окно запроса № 1
Для получения дополнительной информации об этом, обратитесь к http://ajitananthram.wordpress.com/2014/02/23/scripts-to-force-a-deadlock-in-sql-server/
источник