Anteckning
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
gäller för:SQL Server
Azure SQL Database
Azure 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 dusp_configureför att ändra värdetlocksfö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.