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 pode usar mais de 60% da memória disponível para o SQL Server e o limite já foi atingido.
Você configura os bloqueios de opção de configuração do sp_configure de procedimento armazenado do sistema (Transact-SQL) para 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 as seguintes opções:
Identifique se qualquer outro atendente de memória dentro do SQL Server usou uma grande parte da memória configurada do SQL Server, usando uma consulta como a seguinte:
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 libera 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 a quantidade máxima de memória disponível, identifique a transação que está mantendo mais bloqueios e encerre-a. O script a seguir identifica 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 o ID de sessão mais alto e encerre-o usando o comando KILL .
Se você estiver usando um valor não padrão para
locks
, usesp_configure
para alterar o valor delocks
para 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.
Em breve: Ao longo de 2024, eliminaremos os problemas do GitHub como o mecanismo de comentários para conteúdo e o substituiremos por um novo sistema de comentários. Para obter mais informações, consulteEnviar e exibir comentários de