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 de locks para lockssua 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.