Update: Der interne Deadlock-Monitor kann einen Deadlock zwischen zwei oder mehr Sitzungen in SQL Server 2005 nicht erkannt

SPRACHE AUSWÄHLEN SPRACHE AUSWÄHLEN
Artikel-ID: 915918 - Produkte anzeigen, auf die sich dieser Artikel bezieht
# Fehler: 459 (SQL-Hotfix)
Microsoft stellt Updates für Microsoft SQL Server 2005 als downloadbare Datei. Da die Updates kumulativ sind, enthält jede neue Version alle Hotfixes und alle Sicherheitsupdates, die mit früheren SQL Server 2005 enthalten waren.
Alles erweitern | Alles schließen

Auf dieser Seite

Zusammenfassung

Dieser Artikel beschreibt die folgenden zu dieser Hotfix-Version:
  • Durch das Hotfix-Paket behobene Probleme
  • Voraussetzungen für die Anwendung des Hotfix-Pakets
  • Gibt an, ob müssen Sie den Computer neu starten nach der Installation des Hotfix-Pakets
  • Gibt an, ob das Hotfix-Paket wird durch ein anderes Hotfixpaket ersetzt
  • Gibt an, ob Sie Registrierungsänderungen vornehmen müssen, nachdem Sie das Hotfix-Paket angewendet
  • In diesem Hotfix-Paket enthaltene Dateien

Problembeschreibung

In SQL Server 2005 kann ein Deadlock zwischen zwei oder mehr Sitzungen auftreten. Unter ganz bestimmten, seltenen Umständen kann der interne Deadlock-Monitor am Deadlock nicht erkannt. Die Sitzungen und deren aktuellen Transaktionen möglicherweise gesperrt bleiben, bis Sie von Hand eingreifen, oder bis ein Timeout eines der blockierten Transaktionen beendet.

Dieses unerkannte Deadlockproblem tritt nur auf, wenn alle folgenden Bedingungen erfüllt sind:
  • Der Server wird SQL Server 2005 Service Pack 1 (SP1) oder die Originalversion von SQL Server 2005 ausgeführt.
  • Der Server verfügt über mehrere Prozessoren.
  • SQL Server ist so konfiguriert, um Abfragen parallel auszuführen.
  • Eine der deadlocked-Anweisungen wird im parallelen über mehrere Prozessoren ausgeführt.
  • Der Ausführungsplan dieser deadlocked Anweisung führt i. d. r. einen Sortiervorgang oder einer Verknüpfungsoperation Hash aus.
  • Die Scan-Operation oder die Suche Operation unter diesem Sortiervorgang oder unter diesen Hash Verknüpfungsoperation auf eine Sperre wartet.
  • Diese Sperre ist inkompatibel mit einer Sperre, die von einer separaten Update-Anweisung in einer anderen Sitzung gehalten wird.
  • Diese anderen Sitzung möglicherweise nicht parallel ausgeführt.

Lösung

Hotfix-Informationen

Es ist ein unterstützter Hotfix von Microsoft erhältlich. Der Hotfix ist jedoch nur die Behebung des Problems die in diesem Artikel beschriebene vorgesehen. Installieren Sie diesen Hotfix nur auf Systemen, bei die dieses spezielle Problem auftritt. Dieser Hotfix kann einem späteren Zeitpunkt zusätzliche Tests unterzogen. Wenn durch dieses Problem nicht schwerwiegend beeinträchtigt ist, empfiehlt Microsoft daher, auf die nächste Softwareupdate zu warten, das diesen Hotfix enthält.

Wenn der Hotfix zum Download verfügbar ist, ist ein Abschnitt "Hotfix Download available (Hotfixdownload verfügbar" am oberen Rand dieser Knowledge Base-Artikel. Wenn in diesem Abschnitt nicht angezeigt wird, wenden Sie sich an technischen Kundendienst und Support, um den Hotfix zu erhalten.

Hinweis: Wenn weitere Probleme auftreten oder wenn eine Problembehandlung erforderlich ist, müssen Sie möglicherweise eine separate Serviceanfrage erstellen. Die normalen Supportkosten gelten die für zusätzliche Supportfragen und Probleme, die für diesen speziellen Hotfix nicht qualifizieren. Eine vollständige Liste der technischen Kundendienst und Support-Telefonnummern oder eine separate Serviceanfrage erstellen die folgende Microsoft-Website:
http://support.microsoft.com/contactus/?ws=support
Hinweis: Das Formular "Hotfix Download available (Hotfixdownload verfügbar" zeigt die Sprachen für die der Hotfix verfügbar ist. Wenn Ihre Sprache nicht angezeigt wird, ist es, da ein Hotfix nicht für diese Sprache zur Verfügung steht.

Dieser Hotfix ist auch in das kumulative Hotfix-Paket (Build 2153) für SQL Server 2005 enthalten, das im Microsoft Knowledge Base-Artikel 918222 beschrieben wird. Weitere Informationen finden Sie im folgenden Artikel der Microsoft Knowledge Base:
918222Das kumulative Hotfix-Paket (Build 2153) für SQL Server 2005 ist verfügbar

Voraussetzungen

Es gibt keine Voraussetzungen für diesen Hotfix.

Informationen zum Neustart

Sie müssen Ihren Computer nicht neu starten, nachdem Sie diesen Hotfix installiert haben.

Informationen zur Registrierung

Um eines der Updates in diesem Paket verwenden, müssen Sie keine Änderungen an der Registrierung vornehmen.

Dateiinformationen

Dieser Hotfix enthält möglicherweise nicht alle Dateien, die Sie benötigen, um ein Produkt vollständig auf den neuesten Stand zu aktualisieren. Dieser Hotfix enthält nur die Dateien, die Sie benötigen, um die Probleme zu beheben, die in diesem Artikel aufgeführt sind.

Die englische Version dieses Hotfixes weist die Dateiattribute (oder höher Dateiattribute), die in der folgenden Tabelle aufgelistet werden. Die Datums- und Uhrzeitangaben für diese Dateien sind in Coordinated Universal Time (UTC) angegeben. Wenn Sie sich die Dateiinformationen ansehen, werden diese Angaben in die lokale Zeit konvertiert. Verwenden Sie die Registerkarte Zeitzone im Element Datum und Uhrzeit in der Systemsteuerung, um die Differenz zwischen UTC und der Ortszeit zu ermitteln.
SQL Server 2005, 32-Bit-Versionen
Tabelle minimierenTabelle vergrößern
DateinameDateiversionDateigrößeDatumUhrzeitPlattform
Microsoft.SqlServer.Replication.dll2005.90.1531.01,608,40803-Mär-200616: 16X 86
Replrec.dll2005.90.1531.0781,01603-Mär-200616: 16X 86
Sbmsmdlocal.dll9.0.1531.015,588,56803-Mär-200616: 17X 86
Sbmsmdredir_dll9.0.1531.03,927,25603-Mär-200616: 16X 86
Sqlaccess.dll2005.90.1531.0349,40003-Mär-200616: 16X 86
Sqldiag.exe2005.90.1531.0960,21603-Mär-200616: 16X 86
Sqlservr.exe2005.90.1531.028,778,25603-Mär-200616: 17X 86
SQL Server 2005 64-Bit-version
Tabelle minimierenTabelle vergrößern
DateinameDateiversionDateigrößeDatumUhrzeitPlattform
Microsoft.SqlServer.Replication.dll2005.90.1531.01,813,72003-Mär-200616: 17X 64
Osql.exe2005.90.1531.083,67203-Mär-200616: 17X 64
Replrec.dll2005.90.1531.01,007,32003-Mär-200616: 17X 64
Sbmsmdlocal.dll9.0.1531.015,588,56803-Mär-200616: 17X 86
Sbmsmdredir_dll9.0.1531.03,927,25603-Mär-200616: 16X 86
Sqlaccess.dll2005.90.1531.0356,56803-Mär-200616: 17X 86
Sqldiag.exe2005.90.1531.01,127,64003-Mär-200616: 17X 64
Sqlservr.exe2005.90.1531.039,483,09603-Mär-200616: 17X 64

Abhilfe

Manuell erkennen Sie einen langfristigen deadlock

Um dieses Problem zu umgehen, erkennen Sie manuell langfristigen Deadlock. Beenden Sie dann eine der Sessions, die in den Deadlock-Zustand angezeigt wird. Gehen Sie hierzu folgendermaßen vor:
  1. Verwenden Sie eine der folgenden Methoden, um die aktuelle Sitzung blockierende zu ermitteln:
    • Klicken Sie in SQL Server Management Studio auf den Namen der Instanz im Objekt-Explorer, klicken Sie auf die Registerkarte Zusammenfassung und klicken Sie dann in der Liste Bericht auf Aktivität - alle blockierenden Transaktionen .
    • In SQL Server Management Studio erweitern Sie Verwaltung , klicken Sie mit der rechten Maustaste auf Aktivität überwachen , und klicken Sie Ansicht Sperren nach Prozess .
  2. Um den letzten Batch bestimmen, der auf jeder Sitzung ausgeführt haben, führen Sie folgende Codezeile.
    DBCC INPUTBUFFER (<session_id>)
  3. Um die Sitzung beendet, die den Deadlock verursacht wird, führen Sie folgende Codezeile.
    KILL <session_id>
Weitere Informationen finden Sie auf der folgenden Microsoft Developer Network (MSDN)-Websites:
KILL (Transact-SQL)
http://msdn2.microsoft.com/en-us/library/ms173730(SQL.90).aspx

Sys.dm_os_waiting_tasks
http://msdn2.microsoft.com/en-us/library/ms188743(SQL.90).aspx

Sys.dm_tran_locks
http://msdn2.microsoft.com/en-us/library/ms190345.aspx
Eine weitere Methode, langfristigen Deadlock manuell zu erkennen ist den blockierte Prozess Schwellenwert zu konfigurieren. Hierzu verwenden Sie Sp_configure gespeicherte Prozedur zusammen mit der Option Process Threshold blockiert . Dann überwachen Sie die Blockierte Prozess Bericht -Ereignisklasse in SQL Server Profiler, oder verwenden Sie die Sp_trace_create gespeicherten Prozedur und die Sp_trace_setevent gespeicherten Prozedur für die serverseitige Ablaufverfolgung. Weitere Informationen finden Sie auf folgenden Websites von MSDN:
Option für blockierte Prozess-threshold
http://msdn2.microsoft.com/en-us/library/ms181150.aspx

Blockierte Prozess Bericht Ereignisklasse
http://msdn2.microsoft.com/en-us/library/ms191168(SQL.90).aspx

Reduzieren der Verzögerungen, die durch ein nicht erkanntes Deadlock verursacht werden

Um die Verzögerungen zu verringern, die durch ein nicht erkanntes Deadlock verursacht werden, können Sie die folgenden Techniken verwenden:
  • Einen Timeoutwert von angemessenen Befehl in der Anwendung, die Befehle an SQL Server sendet festgelegt. Wenn die Anwendung mehr als den Befehls-Timeoutwert wartet, wird die Abfrage, die in der deadlocked Sitzung ausgeführt wird automatisch abgebrochen, um zusätzliche Verzögerungen zu vermeiden. Verwenden Sie eine der folgenden Eigenschaften, um den Befehl Timeout-Wert festzulegen:
    • Verwenden Sie in einer Anwendung, die auf ActiveX Data Objects (ADO) basiert, die CommandTimeout -Eigenschaft des Verbindung -Objekts oder des Befehlsobjekts .
    • Verwenden Sie in einer Anwendung, die auf Microsoft ADO.NET basiert, die SqlCommand.CommandTimeout- Eigenschaft. Weitere Informationen über die SqlCommand.CommandTimeout- Eigenschaft der folgenden MSDN-Website:
      http://msdn2.microsoft.com/en-us/library/system.data.sqlclient.sqlcommand.commandtimeout(VS.80).aspx
  • Verwenden Sie die SET LOCK_TIMEOUT-Transact-SQL-Anweisung in der aufrufenden Anwendung, um die Anzahl der Millisekunden anzugeben, die eine Anweisung wartet, bis eine Sperre freigegeben werden. Nach das Sperrtimeout auftritt, wird eine der zwei Anweisungen in den langfristigen Deadlock abgebrochen und die Anweisung Transaktion ein Rollback. Dann die andere Abfrage erhält die erforderliche Sperre und die andere Abfrage ausgeführt wird bis Sie abgeschlossen ist. Um die Sperre Zeitlimiteinstellung für eine Verbindung zu überprüfen, verwenden Sie die folgende Abfrage ein.
    SELECT @@LOCK_TIMEOUT
    Weitere Informationen zu SET LOCK_TIMEOUT-Transact-SQL-Anweisung den folgenden MSDN-Website:
    http://msdn2.microsoft.com/en-us/library/ms189470(SQL.90).aspx
  • Festlegen Sie die Option Query wait mithilfe der Sp_configure gespeicherten Prozedur. Die Option Query wait ist eine serverweite-Option, die die maximale Zeitspanne in Sekunden, die eine Abfrage auf dem Server für eine Ressource wartet definiert, bevor die Abfrage überschritten Zeitlimit. Jedoch eventuell diese Option nachteilige Auswirkungen auf Abfragen mit langer oder lang andauernde Stapelverarbeitungen, die Sie dauern voraussichtlich um fertig zu stellen. Weitere Informationen über die Option Query wait die folgenden MSDN-Website:
    http://msdn2.microsoft.com/en-us/library/ms189539.aspx
  • Verwenden Sie die OPTION (MAXDOP 1)-Klausel, um einen Hinweis der Problem-Abfrage oder in der gespeicherten Prozedur bereitzustellen. Verwenden Sie das Sp_create_plan_guide gespeicherten Verfahren, um den Hinweis Verwenden Sie die Planhinweisliste erzwingen.

    Hinweis: Die MAXDOP 1 Option verringert möglicherweise die Abfrageleistung, da die Abfrage nicht unterteilt zu sein, auf mehreren Prozessoren auszuführen.
  • Beschränken den Grad der Parallelität zu einem gewissen Grad, um die Parallelität für die Instanz von SQL Server zu deaktivieren. Verwenden Sie das folgende Codebeispiel.
    sp_configure 'max degree of parallelism', 1
    go
    reconfigure with override
    
    Hinweis: Wenn der Server hat mehrere Prozessoren und mehrere hohe Kosten Abfragen, die Parallelität regelmäßig verwenden, deaktivieren Parallelität nachteilige Auswirkungen auf die Leistung dieser Abfragen möglicherweise. Weitere Informationen finden Sie auf folgenden Websites von MSDN:
    Abfragehinweis (Transact-SQL)
    http://msdn2.microsoft.com/en-us/library/ms181714.aspx

    max Degree of Parallelism (Option)
    http://msdn2.microsoft.com/en-us/library/ms181007(SQL.90).aspx
  • Verwenden Sie die Best-Practice-Techniken, die in SQL Server 2005 Books Online Abfragen schreiben, die Deadlocks zu verhindern möglicherweise beschrieben werden. Verwenden Sie darüber hinaus Best-Practice-Techniken, um die betroffene Abfragen mithilfe von unterstützenden Indizes um Blockierung zu verringern und um die Sperre Konflikte zu vermeiden, die zu Deadlocks führen zu optimieren. Weitere Informationen zum Minimieren von Deadlocks finden Sie auf folgenden MSDN-Website:
    http://msdn2.microsoft.com/en-us/library/ms191242.aspx

Status

Microsoft hat bestätigt, dass dies ein Problem in Microsoft-Produkten handelt, die im Abschnitt "Gilt für" aufgeführt sind.

Weitere Informationen

Führen Sie folgende Codezeile, um überprüfen, blockieren Sitzungen einen true Deadlock auftreten.
Select * from sys.dm_os_waiting_tasks
Überprüfen Sie die Informationen in der sys.dm_os_waiting_tasks dynamic Management-Ansicht. Um ein Deadlock true sein, wird eine Ausführungskontext, der von der Exec_context_id Spalte eine bestimmte Sitzung identifiziert wird von einer anderen Sitzung blockiert. Beispielsweise wird die Blocking_session_id Spalte aufgefüllt. Um ein Deadlock true, wird die blockierende Sitzung von eines Ausführungskontexte der ersten Sitzung blockiert. Daher wird dadurch eine Ringabhängigkeit von Sperren, die Sie nie erhalten können, erstellt.

Ebenso sollte die Informationen in der sys.dm_tran_locks dynamic Management-Ansicht oder in der ' sp_lock ' gespeicherte Prozedur anzeigen, die es Sperren wartet. Eine Sitzung hat der WAIT-Wert oder der CONVERT-Wert in der Request_status Spalte. Die entgegengesetzte Sitzung bereits hat den Wert GRANT auf die Sperre, die mit der erforderlichen Sperren nicht kompatibel ist. Daher tritt ein Kreis zu blockieren, weder Sitzung ohne Eingriff gewinnen kann. Die Mitglieder der Sysadmin -Rolle oder der Rolle Processadmin können manuell den Deadlock erkennen. Weitere Informationen zu Deadlocks und zum Erkennen von Deadlocks der folgenden MSDN-Website:
http://msdn2.microsoft.com/en-us/library/ms178104(SQL.90).aspx
Dieses unerkannte Deadlockproblem wird nicht durch den Deadlock Monitor Algorithmus selbst verursacht. Dieses unerkannte Deadlockproblem wird jedoch dadurch verursacht, dass ein Task SQL Server 2005 SOS Informationen zu der Deadlock-Überwachungsthread meldet. Die Informationen sind über die andere Aufgaben blockiert von Deadlock Monitor Thread Fortschritt.

In seltenen Fällen die in diesem Abschnitt erwähnten meldet die SOS-Aufgabe an, dass eine Aufgabe durch einen Vorgang blockiert wird, die null ist. Dieser Hotfix ändert das Verhalten, so dass der blockierte Vorgang meldet die Adresse Aufgabe den wichtigsten Ausführungskontext für die tatsächlichen blockieren Anforderungs-ID oder für die echten blockieren Sitzung ID

Die folgenden Faktoren stellen dieses unerkannte Deadlockproblem sehr selten auftreten:
  • Die Ereignisse in den folgenden Schritten müssen genau in dieser Reihenfolge eintreten. Andernfalls tritt ein Deadlock nicht, oder ein Deadlock auftritt und erkannt wird.
  • Dieses unerkannte Deadlockproblem erfordert eine bestimmte Art von parallel scannen. Die Überprüfung ist nicht deterministisch Natur. Ein Thread während des Scans parallele benötigen die gesperrten Datenseiten in einer bestimmten Reihenfolge. Bestimmte Reihenfolge ist nicht unbedingt dieselben jedes Mal ist die Überprüfung nicht deterministische Natur. Aus diesem Grund dieses unerkannte Deadlockproblem kann nicht jedes Mal auftreten, dass Sie dieselben Anweisungen mit den gleichen Zeitpunkt ausführen.
Die folgenden Ereignisse müssen in dieser Reihenfolge für dieses Deadlockproblem nicht erkanntes auftreten:
  1. Zwei Transaktionen starten. Transaktion A und Transaktion B z. B. starten.
  2. Transaktion A aktualisiert eine Zeile in Tabelle T zuerst. Allerdings wird eine Transaktion kein Commit für noch ausgeführt. Eine Zeilensperre wird gehalten wird.
  3. Transaktion B Scans Tabelle t Transaktion B erhält Sperren, die mit Transaktion a nicht kompatibel sind Dieses Ereignis kann beispielsweise auftreten, wenn die Überprüfung ein Teil einer größeren Aktualisierungsabfrage ist.
  4. Die Überprüfung in Transaktion B ist eine parallele Überprüfung, die in einen speziellen Teil einer parallelen Abfrage ausgeführt wird. Spezielle Teil der parallelen Abfrage wird im Exchange-Segment bezeichnet. Das Exchange-Segment liegt i. d. r. nach einer Sortierung oder nach einem Hashverknüpfung.
  5. Eine der Scanthreads in Transaktion B wird sich hinter einer Sperre blockiert, die durch Transaktion a gehalten wird Alle anderen Threads beendet Ihre Scans.

    Beachten Sie, dass in Transaktion B jeder Arbeitsthread eine logische Reihenfolge zugewiesen wird, die nicht deterministisch ist, und auf First-Come erste bedient Basis basiert. Der blockierte Thread darf nicht der letzte Thread sein.
  6. Sobald die Transaktion B blockiert wird, führt Transaktion A ein anderes Update in Tabelle t. Dieses Mal wird Transaktion A hinter einer Sperre blockiert, die Transaktion b reserviert ist
Wenn dieser Ereignisse dieser exakte Timing und unter diesen Bedingungen eintreten der Deadlock erkannt werden kann oder der Deadlock möglicherweise nicht erkannt. Dies ist wegen der Art des Problems. Wenn der Deadlock erkannt wird, Transaktion A wird durch Transaktion B blockiert und Transaktion B durch Transaktion a blockiert Dies bindet Ressourcen, bis eines der folgenden Ereignisse auftritt:
  • Sie eingreifen manuell.
  • Ein Timeout beendet eine der blockierten Transaktionen.
  • Sie den SQL Server-Dienst neu starten.
Weitere Informationen zur Terminologie für Softwareupdates finden Sie im folgenden Artikel der Microsoft Knowledge Base:
824684Erläuterung von Standardbegriffen bei Microsoft Softwareupdates

Eigenschaften

Artikel-ID: 915918 - Geändert am: Dienstag, 20. November 2007 - Version: 1.6
Die Informationen in diesem Artikel beziehen sich auf:
  • Microsoft SQL Server 2005 Developer Edition
  • Microsoft SQL Server 2005 Enterprise Edition
  • Microsoft SQL Server 2005 Enterprise X64 Edition
  • Microsoft SQL Server 2005 Standard X64 Edition
  • Microsoft SQL Server 2005 Standard Edition
Keywords: 
kbmt kbautohotfix kbtshoot kbhotfixserver kbqfe kbpubtypekc KB915918 KbMtde
Maschinell übersetzter Artikel
Wichtig: Dieser Artikel wurde maschinell und nicht von einem Menschen übersetzt. Die Microsoft Knowledge Base ist sehr umfangreich und ihre Inhalte werden ständig ergänzt beziehungsweise überarbeitet. Um Ihnen dennoch alle Inhalte auf Deutsch anbieten zu können, werden viele Artikel nicht von Menschen, sondern von Übersetzungsprogrammen übersetzt, die kontinuierlich optimiert werden. Doch noch sind maschinell übersetzte Texte in der Regel nicht perfekt, insbesondere hinsichtlich Grammatik und des Einsatzes von Fremdwörtern sowie Fachbegriffen. Microsoft übernimmt keine Gewähr für die sprachliche Qualität oder die technische Richtigkeit der Übersetzungen und ist nicht für Probleme haftbar, die direkt oder indirekt durch Übersetzungsfehler oder die Verwendung der übersetzten Inhalte durch Kunden entstehen könnten.
Den englischen Originalartikel können Sie über folgenden Link abrufen: 915918
Microsoft stellt Ihnen die in der Knowledge Base angebotenen Artikel und Informationen als Service-Leistung zur Verfügung. Microsoft übernimmt keinerlei Gewährleistung dafür, dass die angebotenen Artikel und Informationen auch in Ihrer Einsatzumgebung die erwünschten Ergebnisse erzielen. Die Entscheidung darüber, ob und in welcher Form Sie die angebotenen Artikel und Informationen nutzen, liegt daher allein bei Ihnen. Mit Ausnahme der gesetzlichen Haftung für Vorsatz ist jede Haftung von Microsoft im Zusammenhang mit Ihrer Nutzung dieser Artikel oder Informationen ausgeschlossen.

Ihr Feedback an uns

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com