Lock request time out period exceeded. (Microsoft SQL Server, Error: 1222) - SQL Server Management Studio - SSMS - Fehler - Error - Das Timeout für Sperranforderung wurde überschritten - Microsoft SQL Server, Fehler 1222

Lock request time out period exceeded. (Microsoft SQL Server, Error: 1222)

Problem

Das Timeout für Sperranforderung wurde überschritten. (Microsoft SQL Server, Fehler: 1222)

TITEL: Microsoft SQL Server Management Studio
——————————

Ausnahme beim Ausführen einer Transact-SQL-Anweisung oder eines Transact-SQL-Batches. (Microsoft.SqlServer.ConnectionInfo)

——————————
ZUSÄTZLICHE INFORMATIONEN:

Das Timeout für Sperranforderung wurde überschritten.
Das Timeout für Sperranforderung wurde überschritten. (Microsoft SQL Server, Fehler: 1222)

Hilfe erhalten Sie durch Klicken auf: http://go.microsoft.com/fwlink?ProdName=Microsoft%20SQL%20Server&ProdVer=10.50.6220&EvtSrc=MSSQLServer&EvtID=1222&LinkId=20476

 

Lock request time out period exceeded. (Microsoft SQL Server, Error: 1222)

Wird im SSMS angezeigt.

Der Aktivitätsmonitor kann keine Abfragen für den Server SP-DB-Server ausführen

Der Aktivitätsmonitor kann keine Abfragen für den Server SP-DB-Server ausführen.
Der Aktivitätsmonitor wird für diese Instanz angehalten.
Verwenden Sie das Kontextmenü im Übersichtsbereich, um den Aktivitätsmonitor wieder zu starten.

Zusätzliche Informationen:
Timeout abgelaufen. Das Zeitlimit wurde vor dem Beenden des Vorgangs überschritten oder der Server reagiert nicht. (Microsoft SQL Server)
Der Wartevorgang wurde abgebrochen

Details

Beschreibung

Das Timeout für Sperranforderung wurde überschritten. (Microsoft SQL Server, Fehler: 1222)

Beim starten von Microsoft SQL Server Management Studio (SSMS) werden evtl. folgende Fehlermeldungen angezeigt.

Lock request time out period exceeded. (Microsoft SQL Server, Error: 1222) - SQL Server Management Studio - SSMS - Fehler - Error - Das Timeout für Sperranforderung wurde überschritten - Microsoft SQL Server, Fehler 1222

TITEL: Microsoft SQL Server Management Studio
——————————

Ausnahme beim Ausführen einer Transact-SQL-Anweisung oder eines Transact-SQL-Batches. (Microsoft.SqlServer.ConnectionInfo)

——————————
ZUSÄTZLICHE INFORMATIONEN:

Das Timeout für Sperranforderung wurde überschritten.
Das Timeout für Sperranforderung wurde überschritten. (Microsoft SQL Server, Fehler: 1222)

Hilfe erhalten Sie durch Klicken auf: http://go.microsoft.com/fwlink?ProdName=Microsoft%20SQL%20Server&ProdVer=10.50.6220&EvtSrc=MSSQLServer&EvtID=1222&LinkId=20476

Auf englischen Systemen wird diese Meldung angezeigt:

Lock request time out period exceeded. (Microsoft SQL Server, Error: 1222)

Der Aktivitätsmonitor kann keine Abfragen für den Server SP-DB-Server ausführen

Im SQL-Management-Studio wird folgende Fehlermeldung angezeigt, wenn man versucht den Aktivitätsmonitor zu öffnen:

Der Aktivitätsmonitor kann keine Abfragen für den Server SP-DB-Server ausführen - Timeout abgelaufen - Error - Fehler

Der Aktivitätsmonitor kann keine Abfragen für den Server SP-DB-Server ausführen.
Der Aktivitätsmonitor wird für diese Instanz angehalten.
Verwenden Sie das Kontextmenü im Übersichtsbereich, um den Aktivitätsmonitor wieder zu starten.

Zusätzliche Informationen:
Timeout abgelaufen. Das Zeitlimit wurde vor dem Beenden des Vorgangs überschritten oder der Server reagiert nicht. (Microsoft SQL Server)
Der Wartevorgang wurde abgebrochen

 

Ist-Zustand

Viele SQL-Systemabfragen wie sp_who2 laufen ewig und bringen so keine Ergebnisse oder brechen die Abfrage mit dem o.g. Fehler. 1222 ab.

Im SSMS im Objekt-Explorer sind Elemente wie Agent und Logs nicht vorhanden.

Der Aktivitätsmonitor zeigt die Meldung „Der Aktivitätsmonitor kann keine Abfragen für den Server SP-DB-Server ausführen.“ dafür aber keine Prozesse an.

Es ist nicht möglich im SSMS Berichte anzeigen zu lassen. Es wird folgende Meldung angezeigt: „Die DocumentSite eines WindowFrame kann nur einmal festgelegt werden. (mscorlib)

SystemUmgebung

 

Workaround

Wahrscheinlich blockieren sich mehrere SQL-Prozesse bzw. Abfragen gegenseitig. In unserem Fall ist überschneidet sich die Zeit der blockierten Abfrage mit dem nächtlichen Schwenk des Failover-Clusters.

Auch wenn die SQL-Server-Protokolle in SSMS nicht zur Verfügung stehen, so kann man diese als Textdateien im folgenden Ordner finden:

Program Files\Microsoft SQL Server\MSSQL.n\MSSQL\LOG\ERRORLOG und ERRORLOG.n

Die problematischen Abfragen herausfinden

DBCC opentran()

Mit der SQL-Abfrage

DBCC opentran()

kann die älteste aktive Transaktion herausgefunden werden. Das Ergebnis zeigt die SPID und die Startzeit des Prozesses.

SQL Server Management Studio - SSMS - DBCC opentran() - älteste aktive Transaktion

sys.dm_exec_requests

Hiermit lassen sich die Anfragen anzeigen.

SELECT * FROM sys.dm_exec_requests;
GO

Die wichtigsten Spalten sind:

  • session_id
  • start_time
  • status
  • wait_type (z.B. LCK_M_SCH)

sys.dm_exec_connections

Mit dieser SQL-Abfrage können die Verbindungen (inkl. der problematischen Verbindungen und der Startzeit) angezeigt werden.

SELECT * FROM sys.dm_exec_connections;  
GO

Die wichtigsten Spalten sind:

  • session_id
  • connect_time
  • client_net_adress (Quell-IP der Abfrage)
  • local_net_adress (SQL-Instanz IP-Adresse)

sp_who2, sp_lock, sp_lock2

In diversen Anleitung findet man die SQL-Abfrage

sp_who2

bzw.

sp_who2 <SPID>

bzw.

sp_lock2 <SPID>

 

die in so einem Fall relevanten Daten zeigen soll. In unserem Fall lief die Abfrage zu lange.

Die wichtigsten Spalten sind:

  • SPID
  • Status
  • Login
  • HostName
  • BlkBy (blockiert durch)
  • ProgrammName

 

Workaround 1 – SQL-Server Instanz neu starten

Falls die SQL-Server-Instanz in einem Microsoft Failover-Cluster läuft, dann den Dienst im Failovercluster-Manager - Icon - Symbol Failovercluster-Manager offline und dann online schalten.

Falls nicht, dann den SQL-Server-Dienst der entsprechenden Instanz im SQL Server Configuration Manager - Konfigurations-Manager - Icon - Symbol SQL Server Configuration Manager  „Neu starten„.

Workaround 2 – kill <session_id>

Es ist auch möglich, die oben ermittelten problematischen Sessions zu „killen“.

Hinweis:
Das „killen“ von Sessions könnte unerwünschte Folgen nach sich ziehen (z.b. der Agent-Dienst kann nicht gestartet werden o.Ä.)

Die weiter oben herausgefundene, problematische Sessions können mit folgender SQL-Abfrage abgebrochen werden:

kill <session_id>

bzw.

kill <spid>

Bsp.: In unserem Fall waren die Sessions mit den IDs 52 und 72 geblockt.
Diese wurden mit kill 52 und kill 72 „gekillt“

 

Links

  1. msdn.microsoft.com: sys.dm_exec_requests (Transact-SQL)
  2. www.simple-talk.com: The DBA as Detective: Troubleshooting Locking and Blocking
  3. blog.sqlauthority.com: SQL SERVER – Quickest Way to Identify Blocking Query and Resolution – Dirty Solution
  4. blog.wsol.com: SQL Server Locks, Blocked Processes, and Two Easy Ways to Find Them

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.