Sdílet prostřednictvím


MSSQLSERVER_1204

Platí pro:SQL ServerAzure SQL DatabaseSpravovaná instance Azure SQLDatabáze SQL v Microsoft Fabric

Podrobnosti

Vlastnost Hodnota
Název produktu SQL Server
ID události 1204
Zdroj událostí MSSQLSERVER
Součást SQLEngine
Symbolický název LK_OUTOF
Text zprávy Instance databázového stroje SQL Serveru nemůže v tuto chvíli získat prostředek LOCK. Spusťte příkaz znovu, pokud je aktivních uživatelů méně. Požádejte správce databáze, aby zkontroloval konfiguraci zámku a paměti pro tuto instanci nebo aby zkontroloval dlouhotrvající transakce.

Explanation

Během provádění dotazy často získávají a vydávají zámky na prostředky, ke kterým přistupují. Získání zámku využívá struktury zámků z dostupného fondu zámkových struktur. Pokud nové zámky nelze získat, protože ve fondu nejsou k dispozici žádné další struktury zámků, vrátí se zpráva o chybě 1204. Příčinou tohoto problému může být některý z následujících důvodů:

  • SQL Server nemůže přidělit více paměti, a to buď kvůli tomu, že ho používají jiné procesy, nebo protože SQL Server využil veškerou paměť a dosáhl hodnoty nakonfigurované pomocí možnosti konfigurace maximální paměti serveru.

  • Správce zámků nemůže použít více než 60 procent paměti dostupné pro SQL Server a prahová hodnota už byla splněna.

  • Nastavíte zámek možností konfigurace uložené procedury systému sp_configure (Transact-SQL) na ne výchozí, ne dynamickou hodnotu.

  • V SQL Serveru jste povolili příznaky trasování 1211, 1224 nebo obojí, abyste mohli řídit chování eskalace zámků a spouštíte dotazy, které vyžadují mnoho zámků.

Akce uživatele

  • Pokud máte podezření, že SQL Server nemůže přidělit dostatek paměti, vyzkoušejte následující možnosti:

    • Zjistěte, jestli některé jiné pracovníky paměti v SQL Serveru používaly velkou část nakonfigurované paměti SQL Serveru, a to pomocí dotazu, jako je následující:

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

      Pak snižte spotřebu paměti tohoto pracovníka paměti, aby paměť mohla využívat více prostředků. Další informace najdete v tématu Řešení potíží s nedostatkem paměti nebo nedostatkem paměti v SQL Serveru.

    • Pokud aplikace kromě SQL Serveru využívají prostředky, zkuste tyto aplikace zastavit nebo zvážit jejich spuštění na samostatném serveru. Tím se uvolní paměť z jiných procesů pro SQL Server.

    • Pokud jste nakonfigurovali maximální paměť serveru, zvyšte nastavení maximální paměti serveru .

  • Pokud máte podezření, že správce zámku použil maximální množství dostupné paměti, identifikujte transakci, která drží nejvíce zámků, a ukončete ji. Následující skript identifikuje transakci, která má nejvíce zámků:

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

    Použijte nejvyšší ID relace a ukončete ho pomocí příkazu KILL .

  • Pokud používáte hodnotu, která locksnení výchozí, použijte sp_configure ke změně hodnoty výchozího locks nastavení pomocí následujícího příkazu:

    EXEC sp_configure 'locks', 0;
    
  • Pokud jste při použití příznaků trasování SQL Serveru 1211, 1224 nebo obojího narazili na výše uvedenou chybovou zprávu, zkontrolujte jejich použití a zakažte je při provádění dotazů, které vyžadují velký počet zámků. Další informace najdete v tématu Nastavení příznaků trasování pomocí DBCC TRACEON a řešení blokujících problémů způsobených eskalací zámku na SQL Serveru.