Announcement

Collapse
No announcement yet.

Fehlermeldung, Deadlock

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Fehlermeldung, Deadlock

    Hallo,

    in meinem Delphi-MS-SQL-Projekt erhalte ich
    folgende Feldermeldung:

    "Die Transaktion (Prozess-ID 56) befand sich auf lock Ressourcen wegen eines anderen Prozesses in einer Deadlocksituation und wurde als Deadlockopfer ausgewählt. Führen Sie die Transaktion erneut aus", script = "exec ReadIDaten, duration = 2239 ms "

    Fragen: a) Welche konkrete Bedeutung hat dieser Fehler ?
    b) Wie kann ich herausfinden, welcher Zugriff auf welche Tabelle zeitkritisch ist ?

    Ich bin Anfänger im MS SQL-Server.

    Danke.
    Gruß

    Ralf Eberhard

  • #2
    Hallo Ralf,

    ein Deadlock entsteht in einer Situation, in der zwei Transaktionen gegenseitig auf das Beenden von Sperren warten. z.B:

    1. UserA sperrt den Datensatz für Person Meier
    2. UserB sperrt den Datensatz für Person Müller
    3. UserA sperrt ebenfalls den Datensatz für Person Müller
    -> Das stellt noch kein Problem dar, normalerweise "wartet" die Transaktion von UserA jetzt darauf, daß die Sperre auf Person Müller durch das Ende der Transaktion von UserB aufgehoben wird
    4. UserB sperrt den Datensatz für Person Meier
    -> DEADLOCK, da jetzt UserB auf UserA und umgekehrt wartet!

    Die Wahrscheinlichkeit für einen Deadlock steigt mit der durchschnittlichen Dauer der Transaktionen und der Anzahl der jeweils gesperrten DS/Tabellen.

    In aller Regel kann man Deadlocks aber durch ändern der Anwendungslogik (andere Reihenfolge, aufteilen in mehrere Transaktionen etc.) verhindern.

    Gruß Falk
    Wenn du denkst du hast alle Bugs gefunden, dann ist das ein Bug in deiner Denksoftware.

    Quellcode ohne ein Mindestmaß an Formatierung sehe ich mir nicht an! Ich leiste keinen Privatsupport per Mail oder PN!

    Comment


    • #3
      Hallo,

      b) Wie kann ich herausfinden, welcher Zugriff auf welche Tabelle zeitkritisch ist ?
      Der Profiler des MS SQL Server 2005 kann nun unter anderem die folgenden EventClass mitprotokollieren:
      • Lock Deadlock
      • Lock Deadlock Chain
      • Deadlock graph
      Sobald der Eintrag Deadlock graph in der EventClass-Liste auftaucht, kann über diesen Eintrag eine visuelle Darstellung der Datenbankzugriffe abgerufen werden, die zu diesem Deadlock geführt hat (siehe Abbildung)

      Eine konsequente Umsetzung einer Deadlock-freien Datenbank hätte sehr gravierende Nebenwirkungen. Praxistauglicher ist daher die Empfehlung, einfach mit dem SQL-Fehler 1205 zu leben und im Deadlock-Fall die SQL-Anweisung neu auszuführen. Da bei einem Deadlock immer ein schmales Zeitfenster im Spiel ist, verringert sich die Wahrscheinlichkeit des erneuten Auftretens beim zweiten Aufruf.
      Attached Files

      Comment

      Working...
      X