Das Blockieren von Transaktionen kann zu einem Deadlock führen, wobei sich mehrere Transaktionen in einem Zustand befinden, in dem keine mehr weiter verarbeitet werden kann.
Ein Deadlock kann aus zwei Gründen entstehen:
Zyklischer Blockierkonflikt Transaktion A wird durch Transaktion B blockiert, und Transaktion B wird durch Transaktion A blockiert. Mehr Zeit wird hier das Problem sicherlich nicht lösen. Eine der Transaktionen muss abgebrochen werden, damit die andere fortfahren kann. Die gleiche Situation kann auch entstehen, wenn mehr als zwei Transaktionen in einem Zyklus blockiert sind.
Alle aktiven Datenbank-Threads sind blockiert Wenn eine Transaktion blockiert wird, erfolgt keine Freigabe Ihres Datenbank-Threads. Wird ein Server mit drei Threads konfiguriert, und die Transaktionen A, B und C werden durch die Transaktion D blockiert, die derzeit keine Anforderungen ausführt, dann ist eine Deadlock-Situation entstanden, da es keine verfügbaren Threads mehr gibt.
Um einen transaktionalen Deadlock zu eliminieren, wählt SQL Anywhere eine am Deadlock beteiligte Verbindung aus, setzt die Änderungen für die auf dieser Verbindung aktive Transaktion zurück und meldet einen Fehler. SQL Anywhere wählt die zurückzusetzende Verbindung unter Verwendung eines internen heuristischen Werts aus, der die Verbindung mit der kürzesten verbliebenen Wartezeit bevorzugt, wie von der Option "blocking_timeout" festgelegt. Wenn alle Verbindungen auf unbegrenzten Wartezustand gesetzt sind, wird die Verbindung, die bewirkte, dass der Datenbankserver den Deadlock erkannte, als Opferverbindung ausgewählt.
Um einen Thread-Deadlock zu eliminieren, wählt SQL Anywhere den letzten Thread-Block aus, setzt die Änderungen für die auf dieser Verbindung aktive Transaktion zurück und meldet einen Fehler.
Die Anzahl der Datenbank-Threads, die der Server benutzt, hängt von den jeweiligen Datenbankeinstellungen ab.
Hinweise darüber, wie Sie die Anzahl der Datenbank-Threads einstellen, finden Sie unter Steuerung des Thread-Verhaltens.
Blockierte Transaktion ermitteln
Deadlocks aus Sybase Central anzeigen
Kommentieren Sie diese Seite in DocCommentXchange. Senden Sie uns Feedback über diese Seite via E-Mail. |
Copyright © 2009, iAnywhere Solutions, Inc. - SQL Anywhere 11.0.1 |