Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Platí pro:SQL Server
Azure SQL Database
Spravovaná 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žijtesp_configureke změně hodnoty výchozíholocksnastavení 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.