Wenn auf Ihrem Computer ein Crash Prey-Fehler auftritt, hoffen wir, dass dieses Benutzerhandbuch Ihnen helfen kann, ihn zu beheben.
Genehmigt: Fortect
Der Fehler “Transaktion kürzlich blockiert” tritt auf, wenn zwei oder mehr Sitzungen normalerweise darauf warten, eine Ressource zu blockieren, die definitiv von einer anderen Sitzung beim Bereinigen von Duplikaten entführt wurde Kette. Daher können Verbindungssitzungen nicht erfolgreich ausgeführt werden und SQL Server muss eingreifen, um jedes Problem zu beheben. Er schaltet die automatische Auswahl einiger Sitzungen frei und das Opfer tötet Ihr eigenes Haustier, damit mehrere andere Sitzungen fortgesetzt werden können. In diesem Szenario erhält der jeweilige Client die Fehlermeldung unmittelbar danach:
Die Transaktion (Prozess-ID) wurde aufgrund eines anderen Prozesses auf dem Arbeiten gegen Ressourcen blockiert und wurde normalerweise als Schwierigkeitsopfer ausgewählt. Führen Sie die Transaktion erneut aus.
und diese Art von beendeter Sitzung wird abgebrochen. Normalerweise ist der Client die Sitzung, die für ein Rollback den geringsten Overhead benötigt.
Warum stürzt SQL Server ab?
Um zu verstehen, was eine “Transaktion (Prozess-ID) für Ressourcen in einem weiteren Prozess stecken geblieben ist und einem Deadlock zum Opfer gefallen ist.” Führen Sie diese Transaktion mit einem Fehler erneut aus. Bringen wir ein ganz einfaches Beispiel.
Als Konsequenz erstellen wir zwei Tabellen “t1” gekoppelt mit “t2”, die eine ganzzahlige Spalte enthalten:
CREATE TABLE t1 (int id)CREATE TABLE t2 (id int)
EINFÜGEN IN t1 (id)AUSWÄHLEN 1 P ALLE VERBINDENALLE 2 VERBINDUNG AUSWÄHLENAUSWÄHLEN 3SPAZIERGANGEINFÜGEN IN t2 (id)1 VERBINDUNG ALLE WÄHLENWÄHLEN SIE 2 VERBINDUNG oder höher
Jetzt ist es soweitselect denkt, dass wir diese Transaktion gestartet haben, die Zeilen mit id = step 2 von t1 löscht:
ÜBERTRAGUNG STARTENDELETE FROM t1 WHERE id = 2
Angenommen, die meisten anderen Verbindungen löschen dieselben Zeilen aus beiden Tabellen:
ÜBERTRAGUNG STARTENLÖSCHEN t2 O id = 2DELETE FROM t1 WHERE id = 2
Sie sollten auf jeden Fall warten, bis die erste Transaktion tatsächlich abgeschlossen ist und Tabelle t1 frei ist.
Aber angenommen, eine Art erste Transaktion kann jetzt den entsprechenden kurzen Zeitraum aus der zweiten Tabelle löschen:
DELETE t2 WHERE id = 2
Nach dieser Überschrift sollten Sie tatsächlich die folgende Korruptionsmeldung erhalten:
Die Transaktion (Prozess-ID) wurde aufgrund des letzten Deadlocks in Zeit und Energie mit einem anderen Job blockiert und wurde als Deadlock-Opfer ausgewählt. Führen Sie die Transaktion zweifellos erneut aus.
Dies liegt wahrscheinlich an der Situation, in der die erste definierte Abrechnung auf eine andere wartet (um t2 freizugeben), während die Transaktion normalerweise auch auf das Original (bei t1) während der angegebenen Zeit wartet.
So analysieren Sie Blockschaltbilder
Die
Block ist ein Block mit den meisten Informationen, der zeigt, welche Taktiken und Sitzungen mit der Schwierigkeit verbunden sind. Dies hilft, genau zu verstehen, warum das Problem aufgetreten ist.
Vor sql 2009-Servern erforderte das Sammeln dieser Informationen das Pairing serverseitiger Knicke oder das Aktivieren von Suchflags und das Warten auf einen Hänger. Ab SQL Server 2008 sind die Aufgaben einfacher. Nach den Schemata des Intensivkurses “System_Health” können Sie alle Sperren nachträglich abrufen. Gehen Sie dazu zu Manage> Advanced Events> Sessions> system_health> package0.event_file und klicken Sie auf Show Target. Daten …
Tausende von Veranstaltungen wurden unter freiem Himmel gezeigt, ich wäre überzeugt in einem Schaufenster. Dort finden Sie das Arbeiten mit Datensätzen, die als “xml_deadlock_report” gekennzeichnet sind. Wählen wir das gerade modellierte
und sehen Sie sich mein Schwierigkeitsdiagramm an. Formulardetails (in XML), einschließlich Lernressourcen und Prozessabschnitten.
Der Ressourcenbereich erstellt eine genaue Liste aller blockierten Ressourcen:
Es zeigt, worüber sich einige Prozesse stritten und was mit den Arten von Sperren zusammenhängt, die Personen verursacht haben. Es gibt zwei oder mehr Datensätze zurück. Jeder Beweis enthält eine Beschreibung einer Ressource, indem Sie Listen von Prozessen folgen, die eine Sperre angenommen und während dieser Ressource eine Sperre erhalten haben. Sperren in einem Abschnitt, die sich hauptsächlich auf einen schönen Schlüssel, eine RID, eine neue Seite oder eine Tabelle beziehen.
Nach dem Support-Desk gehen wir normalerweise zum Abschnitt Prozesse über, um herauszufinden, was diese Techniken bewirken.
Der Prozessabschnittstyp überwacht detaillierte Informationen über alle Prozesse, die normalerweise stecken geblieben sind.
Es umfasst Abschnittseinträge zu Threads, die nur als Teil des Blockierens teilnehmen, und bietet wichtige Anweisungen wie Hostnamen, Logins, Isolationsbereich, Zeit, Sitzungsparameter usw. Aber die wertvollste Information ist die Abgrenzung jeder Anfrage und die Facette, die so oft zum Stillstand geführt hat.
So wählen Sie ein Blockierungsopfer aus
Wenn Sie nicht blockieren können, vermeiden Sie es, festzulegen, welcher Prozess sterben soll, wenn dieser einfach hängen bleibt. SQL Server wählt ein Opfer in der Nähe einer misslichen Lage basierend auf zwei Faktoren aus: der DEADLOCK_PRIORITY-Reihe für jede Sitzung und dem Arbeitsaufwand, den SQL Server leisten muss, um den Transaktionstyp zurückzudrehen.
Der Parameter DEADLOCK_PRIORITY kann vom Treiber a auf HIGH, NORMAL, LOW oder einen ganzzahligen Wert von -zehn bis 10 gesetzt werden. DEADLOCK_PRIORITY ist standardmäßig auf NORMAL (0) gesetzt. Verwenden Sie die folgende Syntax, um sicherzustellen, dass Sie die Blockierungspriorität festlegen:
Genehmigt: Fortect
Fortect ist das weltweit beliebteste und effektivste PC-Reparaturtool. Millionen von Menschen vertrauen darauf, dass ihre Systeme schnell, reibungslos und fehlerfrei laufen. Mit seiner einfachen Benutzeroberfläche und leistungsstarken Scan-Engine findet und behebt Fortect schnell eine breite Palette von Windows-Problemen - von Systeminstabilität und Sicherheitsproblemen bis hin zu Speicherverwaltung und Leistungsengpässen.
DEADLOCK_PRIORITY INSTALLIEREN @deadlock_intvar:: = â € ¦
Zum Beispiel wird eine Sitzung mit der Problempriorität NORMAL als blockierte Person ausgewählt, wenn sie an einer Blockchain teilnimmt. Andere Sitzungen setzen die Blockpriorität auf HIGH oder eine ganze Zahl größer als 0. Und die Situation bleibt bestehen, wenn einige der anderen LOW-Demonstrationen haben eine Sperrpriorität mit einem ganzzahligen Wert kleiner als Null.
LOW ist tatsächlich -5, NORMAL heißt HIGH bis ist 5. Mit anderen Worten, führen Sie die folgenden Befehle aus, um die Prioritätssperre auf NORMAL zu setzen:
SET DEADLOCK_PRIORITY NORMAL;LOS
SET DEADLOCK_PRIORITY 0;LOS
Um zu prüfen, ob eine Sitzungsblockierungsveröffentlichung vorliegt, können Sie die folgende Abfrage verwenden:
SELECT session_id, DEADLOCK_PRIORITY FROM sys.dm_exec_sessions WHERE SESSION_ID = @@ SPID
So vermeiden Sie Deadlocks in SQL Server
Als großer Entwickler sollten Sie Datenbankmodule entwerfen, um das Blockierungsrisiko zu begrenzen. Hier sind einige wertvolle Tipps:
Stellen Sie sicher, dass bestimmte Anwendungen auf alle freigegebenen Objekte in einer bestimmten Reihenfolge zugreifen
Beschleunigen Sie jetzt die Leistung Ihres Computers mit diesem einfachen Download.
Überprüfen Sie den größten Teil des system_health-Managers auf Deadlocks.Erstellen Sie eine erweiterte Reisesitzung mit Deadlock-Erfassung.Analysieren Sie die Absturzberichte, um das Problem zu finden.Wann können wir zusätzliche Verbesserungen vornehmen oder die Anzahl der behinderten Anfragen erhöhen.
Standardmäßig wählt SQL Server Complexity of Sacrifice als die kostengünstigste Transaktion für ein Rollback aus. Einfach ausgedrückt gilt das Material mit dem geringsten Risiko als die profitabelste Datenbank. Dann wird wahrscheinlich der Prozess mit der schwächsten primären Sperre ausgewählt, da er das Opfer ist, das mit der Sperre verknüpft ist.
Eine Schwierigkeit tritt auf, wenn eine Transaktion versucht, ein geeignetes Symbol zu aktualisieren, das von einem anderen noch aktiven (noch nicht zugewiesenen) Werk aktualisiert wurde. So vermeiden Sie diese Fehler: Es ist normal, wenn eine Mehrbenutzerdatenbank ausfällt.