MSSQLSERVER_1204
Область применения: SQL Server База данных SQL Azure Управляемый экземпляр SQL Azure
Сведения
Атрибут | Значение |
---|---|
Название продукта | SQL Server |
ИД события | 1204 |
Источник событий | MSSQLSERVER |
Компонент | SQLEngine |
Символическое имя | LK_OUTOF |
Текст сообщения | Экземпляру компонента SQL Server Database Engine не удается получить ресурс LOCK в данный момент времени. Запустите инструкцию повторно, когда число активных пользователей уменьшится. Попросите администратора баз данных проверить конфигурацию блокировки и памяти для данного экземпляра либо выполнить проверку давно выполняющихся транзакций. |
Описание
Во время выполнения запросы часто получают доступ к ресурсам и снимают блокировку доступа к ним. Получение блокировки использует структуры блокировки из доступного пула структур блокировки. Если новые блокировки не удается получить, так как в пуле нет дополнительных структур блокировки, возвращается сообщение об ошибке 1204. Эта проблема может быть вызвана любой из следующих причин:
SQL Server не может выделить больше памяти, так как другие процессы используют его, или так как SQL Server использовал всю память и достиг значения, настроенного с помощью параметра конфигурации максимальной памяти сервера.
Диспетчер блокировки не может использовать более 60 процентов памяти, доступной для SQL Server, и пороговое значение уже выполнено.
Вы настроили блокировки параметров конфигурации системной хранимой процедуры sp_configure (Transact-SQL) в нединамическую, нединамическую.
Вы включили флаги трассировки 1211, 1224 или обоих в SQL Server для управления поведением эскалации блокировки, и выполняете запросы, требующие большого количества блокировок.
Действие пользователя
Если вы подозреваете, что SQL Server не может выделить достаточно памяти, попробуйте выполнить следующие действия.
Определите, использовал ли любой другой клерк памяти в SQL Server большую часть настроенной памяти SQL Server, используя следующий запрос:
SELECT pages_kb, type, name, virtual_memory_committed_kb, awe_allocated_kb FROM sys.dm_os_memory_clerks ORDER BY pages_kb DESC;
Затем уменьшите потребление памяти для этого клерка памяти, чтобы разрешить блокировке памяти использовать больше ресурсов. Дополнительные сведения см. в статье об устранении неполадок с нехваткой памяти или нехваткой памяти в SQL Server.
Если другие приложения, кроме SQL Server, используют ресурсы, попытайтесь закрыть эти приложения или запустите их на отдельном сервере. В этом случае память освобождается от других процессов для SQL Server.
Если вы настроили максимальную память сервера, увеличьте максимальный параметр памяти сервера.
Если вы подозреваете, что диспетчер блокировки использовал максимальный объем доступной памяти, определите транзакцию, которая держит большинство блокировок и завершите ее. Следующий скрипт определяет транзакцию с наибольшим числом блокировок:
SELECT request_session_id, COUNT (*) num_locks FROM sys.dm_tran_locks GROUP BY request_session_id ORDER BY count (*) DESC;
Выполните наивысший идентификатор сеанса и завершите его с помощью команды KILL .
Если вы используете значение
locks
, отличное от по умолчанию, используйтеsp_configure
для изменения значенияlocks
его параметра по умолчанию с помощью следующей инструкции:EXEC sp_configure 'locks', 0;
Если при использовании флагов трассировки SQL Server 1211, 1224 или обоих, проверьте их использование и отключите при выполнении запросов, требующих большого количества блокировок. Дополнительные сведения см. в статье DBCC TRACEON — флаги трассировки (Transact-SQL) и устранение проблем блокировки, вызванных эскалацией блокировки в SQL Server.