Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Dotyczy:SQL Server
Azure SQL Database
Azure SQL Managed Instance
Baza danych SQL w usłudze Microsoft Fabric
Szczegóły
| Attribute | Wartość |
|---|---|
| Nazwa produktu | SQL Server |
| Identyfikator zdarzenia | 1204 |
| Źródło zdarzenia | MSSQLSERVER |
| Składnik | SQLEngine |
| Nazwa symboliczna | LK_OUTOF |
| Tekst wiadomości | Wystąpienie silnika bazy danych programu SQL Server nie może obecnie uzyskać zasobu blokady. Uruchom ponownie instrukcję, gdy liczba aktywnych użytkowników jest mniejsza. Poproś administratora bazy danych o sprawdzenie konfiguracji blokady i pamięci dla tego wystąpienia lub sprawdzenie długotrwałych transakcji. |
Explanation
Podczas wykonywania zapytania często uzyskują i zwalniają blokady zasobów, do których uzyskują dostęp. Uzyskanie blokady wykorzystuje struktury blokady z dostępnej puli struktur blokady. Gdy nie można uzyskać nowych blokad, ponieważ w puli nie ma więcej dostępnych struktur blokady, zwracany jest komunikat o błędzie 1204. Ten problem może być spowodowany dowolnym z następujących powodów:
Program SQL Server nie może przydzielić większej ilości pamięci, ponieważ używane są inne procesy lub program SQL Server wykorzystał całą swoją pamięć i osiągnął wartość skonfigurowaną przy użyciu opcji konfiguracji maksymalnej pamięci serwera.
Menedżer blokady nie może używać więcej niż 60 procent pamięci dostępnej dla programu SQL Server, a próg został już osiągnięty.
Należy skonfigurować blokady opcji konfiguracji systemu procedury składowanej sp_configure (Transact-SQL) na wartość inną niż domyślna, niedynamiczna.
Włączono flagi śledzenia 1211, 1224 lub obu w programie SQL Server w celu kontrolowania zachowania eskalacji blokady i wykonywania zapytań, które wymagają wielu blokad.
Akcja użytkownika
Jeśli podejrzewasz, że program SQL Server nie może przydzielić wystarczającej ilości pamięci, wypróbuj następujące opcje:
Zidentyfikuj, czy jakikolwiek inny urzędnik pamięci w programie SQL Server używał dużej części skonfigurowanej pamięci programu SQL Server, używając zapytania takiego jak następujące:
SELECT pages_kb, type, name, virtual_memory_committed_kb, awe_allocated_kb FROM sys.dm_os_memory_clerks ORDER BY pages_kb DESC;Następnie zmniejsz zużycie pamięci tego urzędnika pamięci, aby umożliwić zablokowanie pamięci do korzystania z większej ilości zasobów. Aby uzyskać więcej informacji, zobacz Rozwiązywanie problemów z brakiem pamięci lub małą ilością pamięci w programie SQL Server.
Jeśli aplikacje oprócz programu SQL Server zużywają zasoby, spróbuj zatrzymać te aplikacje lub rozważyć ich uruchomienie na osobnym serwerze. Spowoduje to wydanie pamięci z innych procesów dla programu SQL Server.
Jeśli skonfigurowano maksymalną pamięć serwera, zwiększ ustawienie maksymalnej pamięci serwera .
Jeśli podejrzewasz, że menedżer blokady użył maksymalnej ilości dostępnej pamięci, zidentyfikuj transakcję, która przechowuje najwięcej blokad i zakończ ją. Poniższy skrypt identyfikuje transakcję, która ma najwięcej blokad:
SELECT request_session_id, COUNT (*) num_locks FROM sys.dm_tran_locks GROUP BY request_session_id ORDER BY count (*) DESC;Użyj najwyższego identyfikatora sesji i zakończ go za pomocą polecenia KILL .
Jeśli używasz wartości innej niż domyślna ,
locksużyj poleceniasp_configure, aby zmienić wartośćlocksna jej ustawienie domyślne przy użyciu następującej instrukcji:EXEC sp_configure 'locks', 0;Jeśli podczas korzystania z flag śledzenia programu SQL Server 1211, 1224 lub obu wystąpi powyższy komunikat o błędzie, przejrzyj ich użycie i wyłącz podczas wykonywania zapytań wymagających dużej liczby blokad. Aby uzyskać więcej informacji, zobacz Ustawianie flag śledzenia za pomocą funkcji TRACEON DBCC i Rozwiązywanie problemów z blokowaniem spowodowanych eskalacją blokady w programie SQL Server.