MSSQLSERVER_1204
Aplica-se a:SQL ServerBanco de Dados SQL do AzureInstância Gerenciada de SQL do Azure
Detalhes
Atributo | Valor |
---|---|
Nome do produto | SQL Server |
ID do evento | 1204 |
Origem do Evento | MSSQLSERVER |
Componente | SQLEngine |
Nome simbólico | LK_OUTOF |
Texto da mensagem | A instância do Mecanismo de Banco de Dados do SQL Server não pode obter um recurso LOCK neste momento. Execute a instrução novamente quando houver menos usuários ativos. Peça ao administrador de banco de dados que verifique a configuração do bloqueio e da memória dessa instância ou as transações de longa execução. |
Explicação
Durante a execução, as consultas recebem e liberam bloqueios constantemente nos recursos que acessam. O recebimento de um bloqueio utiliza as estruturas de bloqueio de um pool disponível de estruturas de bloqueio. Quando não é possível receber novos bloqueios porque não há mais nenhuma estrutura de bloqueio disponível no pool, a mensagem de erro 1204 é retornada. Esse problema pode ser devido a qualquer um dos seguintes motivos:
O SQL Server não pode alocar mais memória, porque outros processos estão usando-o ou porque o SQL Server usou toda a memória e atingiu o valor configurado usando a opção de configuração max server memory.
O gerenciador de bloqueio não usará mais de 60% da memória disponível para o SQL Server e o limite já foi atingido.
Você configurou os bloqueios de opção de configuração do procedimento armazenado do sistema sp_configure a um valor não padrão e não dinâmico.
Você habilitou os sinalizadores de rastreamento 1211, 1224 ou ambos no SQL Server para controlar o comportamento de escalonamento de bloqueio e está executando consultas que exigem muitos bloqueios.
Ação do usuário
Se você suspeitar que o SQL Server não pode alocar memória suficiente, tente o seguinte:
Utilize a consulta a seguir para identificar se algum outro administrador de memória no SQL Server utilizou uma grande parte da memória configurada do 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
Depois, reduza o consumo de memória desse administrador de memória para permitir que a memória de bloqueio utilize mais recursos. Para obter mais informações, consulte Solucionar problemas de memória insuficiente ou memória insuficiente no SQL Server.
Se outros aplicativos além do SQL Server estiverem consumindo recursos, tente interromper esses aplicativos ou considere executá-los em um servidor separado. Isso liberará memória de outros processos para o SQL Server.
Se você configurou a memória máxima do servidor, aumente a configuração de memória máxima do servidor.
Se você suspeitar que o gerenciador de bloqueio usou o máximo de memória disponível, identifique a transação que está mantendo a maioria dos bloqueios e encerre-a. O script a seguir identificará a transação que tem mais bloqueios:
SELECT request_session_id, COUNT (*) num_locks FROM sys.dm_tran_locks GROUP BY request_session_id ORDER BY count (*) DESC
Pegue a ID de sessão mais alta e encerre-a usando o comando KILL .
Se você estiver usando um valor não padrão para , use
sp_configure
para alterar o valor delocks
paralocks
sua configuração padrão usando a seguinte instrução:EXEC sp_configure 'locks', 0
Se você encontrou a mensagem de erro acima ao usar os sinalizadores de rastreamento do SQL Server 1211, 1224 ou ambos, revise seu uso e desabilite-os durante a execução de consultas que exigem um grande número de bloqueios. Para obter mais informações, consulte DBCC TRACEON - Sinalizadores de rastreamento (Transact-SQL) e Resolver problemas de bloqueio causados pelo escalonamento de bloqueio no SQL Server.
Comentários
https://aka.ms/ContentUserFeedback.
Brevemente: Ao longo de 2024, vamos descontinuar progressivamente o GitHub Issues como mecanismo de feedback para conteúdos e substituí-lo por um novo sistema de feedback. Para obter mais informações, veja:Submeter e ver comentários