У меня есть хранимая процедура на SQL Server 2005, выполняющая сериализуемую транзакцию. Внутри этой транзакции он выбирает таблицу с блокировкой строк. В конце процедуры, после отката / фиксации, он устанавливает уровень изоляции транзакции на Read Commited.
Эта процедура выполняется, разные процессы имеют одновременный доступ, управляемый этими ограничениями, но внезапно, через некоторое время, некоторые процессы выдают исключение Sql:
The instance of the SQL Server Database Engine cannot obtain a LOCK resource at this time. Rerun your statement when there are fewer active users. Ask the database administrator to check the lock and memory configuration for this instance, or to check for long-running transactions.
Это непредсказуемо, это может произойти рано или через час.
Что я могу сделать, чтобы решить эту проблему?





у вас слишком много замков для вашей памяти. увеличьте оперативную память или перепишите запросы, чтобы использовать меньше блокировок. serializable - это блокировка. тебе это действительно нужно?
Это то, что делает менеджер предприятия при сохранении изменений таблицы. Кто-то из команды SQL Server решил, что мне нужен уровень трансизоляции serializalbe.
Я решил эту ошибку, уменьшив диапазон данных, передаваемых между серверами, это означает, что если вы выбираете 1000 записей, попробуйте сократить транзакцию на два пакета для 500 записей и еще 500 записей продолжайте уменьшать число, пока ошибка не прекратится
+1 Полностью согласен. Вам действительно нужна сериализуемая транзакция?