Megosztás a következőn keresztül:


MSSQLSERVER_1204

A következőkre vonatkozik:SQL ServerAzure SQL DatabaseFelügyelt Azure SQL-példánySQL-adatbázis a Microsoft Fabricben

Részletek

Attribute Érték
Terméknév SQL Server
Eseményazonosító 1204
Eseményforrás MSSQLSERVER
Összetevő SQLEngine
Szimbolikus név LK_OUTOF
Üzenet szövege Az SQL Server adatbázismotor példánya jelenleg nem tud LOCK-erőforrást beszerezni. Ismételje meg a nyilatkozatát, amikor kevesebb aktív felhasználó van. Kérje meg az adatbázis-adminisztrátort, hogy ellenőrizze az adott példány zár- és memóriakonfigurációját, vagy ellenőrizze a hosszú ideig futó tranzakciókat.

Explanation

A végrehajtás során a lekérdezések gyakran szereznek be és oldanak fel zárolásokat az általuk elért erőforrásokon. A zárolás megszerzéséhez a zárolási struktúrák egy rendelkezésre álló készletből származó zárolási struktúrákat használják. Ha az új zárolások nem szerezhetők be, mert nincs több zárolási struktúra a készletben, a rendszer az 1204-ben megadott hibaüzenetet adja vissza. Ez a probléma az alábbi okok bármelyikének tudható be:

  • Az SQL Server nem tud több memóriát lefoglalni, vagy azért, mert más folyamatok használják, vagy mert az SQL Server felhasználta az összes memóriáját, és elérte a kiszolgáló memóriájának maximális konfigurációs beállításával konfigurált értéket.

  • A zároláskezelő nem használhatja az SQL Server számára elérhető memória több mint 60 százalékát, és a küszöbérték már teljesült.

  • Beállítja a rendszer által tárolt eljárás konfigurációs beállítási zárolásait, sp_configure (Transact-SQL) nem alapértelmezett, nem dinamikus értékre.

  • Engedélyezte az 1211-es, 1224-es vagy mindkettő nyomkövetési jelzőket az SQL Serveren a zárolás eszkalációs viselkedésének szabályozásához, és olyan lekérdezéseket hajt végre, amelyekhez sok zárolás szükséges.

Felhasználói művelet

  • Ha azt gyanítja, hogy az SQL Server nem tud elegendő memóriát lefoglalni, próbálkozzon az alábbi lehetőségekkel:

    • Az alábbihoz hasonló lekérdezéssel állapítsa meg, hogy az SQL Serveren belül bármely más memóriajegyző használta-e az SQL Server által konfigurált memória nagy részét:

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

      Ezután csökkentse a memóriajegyző memóriahasználatát, hogy a memória zárolása több erőforrást használjon. További információ: Az SQL Server kevés memóriával vagy kevés memóriával kapcsolatos problémáinak elhárítása.

    • Ha az SQL Serveren kívül más alkalmazások is használnak erőforrásokat, próbálja meg leállítani ezeket az alkalmazásokat, vagy fontolja meg az alkalmazások külön kiszolgálón való futtatását. Ez felszabadítja a memóriát az SQL Server más folyamataiból.

    • Ha a kiszolgáló maximális memóriáját konfigurálta, növelje a kiszolgáló memóriájának maximális beállítását.

  • Ha azt gyanítja, hogy a zároláskezelő a rendelkezésre álló memória maximális mennyiségét használta, azonosítsa azt a tranzakciót, amely a legtöbb zárolást tartja, és állítsa le. A következő szkript a legtöbb zárolást tartalmazó tranzakciót azonosítja:

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

    Vegye ki a legmagasabb munkamenet-azonosítót, és állítsa le a KILL paranccsal.

  • Ha nem alapértelmezett értéket lockshasznál, sp_configure az alábbi utasítással módosíthatja locks az alapértelmezett értékre:

    EXEC sp_configure 'locks', 0;
    
  • Ha a fenti hibaüzenetet az SQL Server 1211-es, 1224-es vagy mindkettő nyomkövetési jelzőinek használatakor észlelte, tekintse át a használatukat, és tiltsa le őket a nagy számú zárolást igénylő lekérdezések végrehajtásakor. További információkért tekintse át a nyomkövetési jelzők beállítását a DBCC TRACEON használatával , és oldja meg az SQL Server zárolási eszkalációja által okozott blokkolási problémákat.