Udostępnij za pomocą


MSSQLSERVER_1204

Dotyczy:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceBaza 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 polecenia sp_configure , aby zmienić wartość locks na 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.