Sybase ASE: "Ihr server-Befehl auftreten einer deadlock-situation"
Beim ausführen einer gespeicherten Prozedur (aus einer .NET-Anwendung) vorhanden ist, die eine INSERT-und eine UPDATE, ich habe manchmal (aber nicht oft, wirklich) und zufällig diese Fehlermeldung erhalten:
FEHLER [40001] [DataDirect][ODBC Sybase Wire Protocol driver][SQL Server]den server-Befehl (family id #0, Prozess-id #46) auf eine deadlock-situation. Bitte re-führen Sie Ihren Befehl.
Wie kann ich dieses Problem beheben?
Dank.
Wissen Sie, was ein deadlock ist, warum ein deadlock passieren kann ... und warum es wird passiert Ihr code? Haben Sie versucht, Googeln wie "sybase" und "deadlock"?
Ja, ich weiß, was es ist, ja, ich habe gegoogelt. Die Sache ist, die deadlock passiert sehr selten. Als die Abfrage ist einfach (ein update und ein insert), sollte es im schlimmsten Fall sein, verzögert vom server, wenn einige andere Sperre blockiert wird, nicht einfach nur werfen es aus. Auch der Fehler nicht sagen, was der deadlock wurde auf (in welcher Tabelle, Zeile, etc.) was es schwierig macht, das problem zu lösen. Ich kann nicht manuell verhindern, dass 2 Anfragen von der Ankunft auf dem server in der gleichen Zeit!
Ein deadlock nie Verzögerungen andere Prozesse beendet Sie den anderen Prozess tot - ich würde Lesen Sie mehr über deadlocks, wie Sie havn ' T Verständnis gezeigt
Nun, das ist der springende Punkt, Mark. Ich sage es /sollte/ verzögert werden, wie in,, das ist das Verhalten, das erwartet wird. Natürlich, das problem hier ist, dass ist nicht das Verhalten, die ich erhalte, anstatt verzögert, es verursacht einen deadlock und vollständig gesperrt.
Ja, ich weiß, was es ist, ja, ich habe gegoogelt. Die Sache ist, die deadlock passiert sehr selten. Als die Abfrage ist einfach (ein update und ein insert), sollte es im schlimmsten Fall sein, verzögert vom server, wenn einige andere Sperre blockiert wird, nicht einfach nur werfen es aus. Auch der Fehler nicht sagen, was der deadlock wurde auf (in welcher Tabelle, Zeile, etc.) was es schwierig macht, das problem zu lösen. Ich kann nicht manuell verhindern, dass 2 Anfragen von der Ankunft auf dem server in der gleichen Zeit!
Ein deadlock nie Verzögerungen andere Prozesse beendet Sie den anderen Prozess tot - ich würde Lesen Sie mehr über deadlocks, wie Sie havn ' T Verständnis gezeigt
Nun, das ist der springende Punkt, Mark. Ich sage es /sollte/ verzögert werden, wie in,, das ist das Verhalten, das erwartet wird. Natürlich, das problem hier ist, dass ist nicht das Verhalten, die ich erhalte, anstatt verzögert, es verursacht einen deadlock und vollständig gesperrt.
InformationsquelleAutor Laurent | 2009-07-10
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ihre beste Wette für die Lösung, die Sie Deadlocks Problem ist das festlegen von "print deadlock information" über die Verwendung
sp_configure "print deadlock information", 1
Gibt es jedes mal ein deadlock dies wird drucken Sie Informationen darüber, welche Prozesse beteiligt waren und welche sql-Sie liefen auf die Zeit, die Toten zu sperren.
Wenn Ihre Tabellen mit allpages sperren. Es kann reduzieren die Wahrscheinlichkeit von deadlocks zu wechseln, um von DataRows oder datapages sperren. Wenn Sie dies tun, stellen Sie sicher, sammeln Sie neue Statistiken über die Tabellen und erstellen Sie Indizes, views, stored procedures und Trigger, die auf die Tabellen zugreifen, die geändert werden. Wenn Sie nicht erhalten Sie entweder Fehler oder nicht sehen, die Vorteile der ändern, je nachdem, welche nicht neu erstellt.
InformationsquelleAutor Todd Pierce
Habe ich eine Reihe von langfristig apps die gelegentlich über lap table access und sybase wird diesen Fehler auslösen. Wenn Sie die sybase-server-log-es wird Ihnen die komplette info auf warum es passiert ist. Wie: sql, beteiligt war, die zwei Prozesse versuchen, um ein Schloss. In der Regel versucht zu Lesen, und die anderen tun so etwas wie eine "löschen". In meinem Fall sind die apps laufen in getrennten JVMs, so kann nicht synchronisieren müssen nur sauber bis in regelmäßigen Abständen.
InformationsquelleAutor Jim Jones
Unter der Annahme, dass Ihre Tabellen korrekt indiziert (und dass Sie tatsächlich nutzen diese Indizes immer lohnt über den query-plan), könnten Sie versuchen, brechen die Teile der SP nach unten und wickeln Sie Sie in separaten Transaktionen, so dass jede Einheit der Arbeit ist abgeschlossen, bevor die nächste beginnt.
InformationsquelleAutor Paul Owens