DBAtlas · Атлас эксплуатации баз данных

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 и снизьте нагрузку на память.

Открыть в DBAtlas →

Ещё по этой СУБД