В настоящее время я провожу несколько экспериментов с базой данных SQL Server 2008. В частности, у меня есть приложение JDBC, которое использует сотни параллельных потоков для выполнения тысяч задач, каждая из которых выполняет следующий запрос к базе данных:
UPDATE from Table A where rowID='123'
Однако я получаю массу тупиковых ошибок (исключение SQL 1205). всякий раз, когда я устанавливаю уровень изоляции выше READ_UNCOMMITTED. Это происходит, даже если я устанавливаю блокировку строк, блокировку таблицы и подсказки эксклюзивной блокировки! И даже в режиме Snapshot Isolation, который не использует блокировки, я все равно получаю тупиковые ошибки.
Я запустил трассировку через SQL Profiler, чтобы получить график тупиковых ситуаций, когда это происходит, но от этого мало толку. Он показал процесс-жертву, подключенный к «пулу потоков», связанный с сотнями других процессов. Вы можете проверить это здесь:
http://i.stack.imgur.com/7rlv3.jpg
У кого-нибудь есть какие-нибудь подсказки относительно того, почему это происходит? Я схожу с ума последние несколько дней, пытаясь понять это. Моя текущая гипотеза состоит в том, что это связано либо с доступными рабочими потоками в моем экземпляре БД, объемом доступной памяти, либо с чем-то, что не связано с фактическими блокировками на уровне запроса.
Спасибо!