1204: The instance of the SQL Server Database Engine cannot obtain a LOCK resource
SQL ServerЧто это значит?
SQL Server не смог выделить память, необходимую диспетчеру блокировок, и не может создать новые блокировки. Операция завершается ошибкой, так как пул памяти блокировок исчерпан.
Почему возникает?
Слишком много мелкозернистых блокировок (строк/страниц), удерживаемых одновременно: большой, неиндексированный или массовый DML; запрет эскалации блокировок; общая нехватка памяти на сервере; либо долго открытые транзакции. Изредка триггером является внешняя нагрузка на память.
Как исправить
Разбейте большие операции на меньшие пакеты, чтобы уменьшить число одновременных блокировок. Используйте подходящие индексы, чтобы сократить число сканируемых/блокируемых строк. Проверьте конфигурации, отключающие эскалацию блокировок: флаги трассировки 1211/1224 и ALTER TABLE ... SET (LOCK_ESCALATION = DISABLE); проверьте с помощью SELECT name, lock_escalation_desc FROM sys.tables; и DBCC TRACESTATUS(-1); Проверьте память сервера и параметр max server memory и снизьте нагрузку на память.
Ещё по этой СУБД
- 40613Database is not currently available (Azure SQL)
- 102Incorrect syntax near 'token'
- 8114Error converting data type X to Y
- 3906Failed to update database because the database is read-only
- 15023User already exists in the current database
- 18452Login failed. The login is from an untrusted domain and cannot be used with Windows authentication
- 605Attempt to fetch logical page belongs to a different allocation unit