Dela via


MSSQLSERVER_1204

gäller för:SQL ServerAzure SQL DatabaseAzure SQL Managed Instance

Detaljer

Attribute Värde
Produktnamn SQL Server
Händelse-ID 1204
Händelsekälla MSSQLSERVER
Komponent SQLEngine
Symboliskt namn LK_OUTOF
Meddelandetext Instansen av SQL Server Database Engine kan inte hämta en LOCK-resurs just nu. Kör instruktionen igen när det finns färre aktiva användare. Be databasadministratören kontrollera lås- och minneskonfigurationen för den här instansen eller att söka efter långvariga transaktioner.

Explanation

Under körningen låser sig frågor ofta och frigör de resurser som de kommer åt. När du hämtar ett lås används låsstrukturerna från en tillgänglig pool med låsstrukturer. När nya lås inte kan hämtas eftersom det inte finns fler låsstrukturer tillgängliga i poolen returneras felmeddelandet 1204. Det här problemet kan bero på någon av följande orsaker:

  • SQL Server kan inte allokera mer minne, antingen för att andra processer använder det eller för att SQL Server har förbrukat allt minne och nått det värde som konfigurerats med konfigurationsalternativet maximalt serverminne.

  • Låshanteraren kan inte använda mer än 60 procent av det tillgängliga minnet för SQL Server och tröskelvärdet har redan uppfyllts.

  • Du konfigurerar konfigurationsalternativlåsen för den systemlagringsprocedur som sp_configure (Transact-SQL) till ett icke-standardvärde som inte är dynamiskt.

  • Du har aktiverat Spårningsflaggor 1211, 1224 eller båda på SQL Server för att kontrollera låseskaleringsbeteendet, och du kör frågor som kräver många lås.

Användaråtgärd

  • Om du misstänker att SQL Server inte kan allokera tillräckligt med minne kan du prova följande alternativ:

    • Identifiera om någon annan minnestjänsteman i SQL Server har använt en stor del av sql Server-konfigurerat minne med hjälp av en fråga som liknar följande:

      SELECT pages_kb, type, name, virtual_memory_committed_kb, awe_allocated_kb
      FROM sys.dm_os_memory_clerks
      ORDER BY pages_kb DESC;
      

      Minska sedan minnesförbrukningen för den minnestjänstemannen så att låsminnet kan använda fler resurser. Mer information finns i Felsöka problem med minnesbrist eller minnesbrist i SQL Server.

    • Om program förutom SQL Server förbrukar resurser kan du prova att stoppa dessa program eller överväga att köra dem på en separat server. Detta frigör minne från andra processer för SQL Server.

    • Om du har konfigurerat maximalt serverminne ökar du inställningen för maximalt serverminne .

  • Om du misstänker att låshanteraren använde den maximala mängden tillgängligt minne identifierar du den transaktion som har flest lås och avslutar den. Följande skript identifierar den transaktion som har flest lås:

    SELECT request_session_id, COUNT (*) num_locks
    FROM sys.dm_tran_locks
    GROUP BY request_session_id
    ORDER BY count (*) DESC;
    

    Ta det högsta sessions-ID:t och avsluta det med hjälp av KOMMANDOT KILL .

  • Om du använder ett icke-standardvärde för locksanvänder du sp_configure för att ändra värdet locks för till standardinställningen med hjälp av följande instruktion:

    EXEC sp_configure 'locks', 0;
    
  • Om du stötte på felmeddelandet ovan när du använde SQL Server-spårningsflaggorna 1211, 1224 eller båda, granskar du deras användning och inaktiverar dem när du kör frågor som kräver ett stort antal lås. Mer information finns i Ange spårningsflaggor med DBCC TRACEON och Lös blockeringsproblem som orsakas av låseskalering i SQL Server.