"feinere" Sperren mit readpast/readuncommitted

Sputnik

Neuer Benutzer
Beiträge
2
Hallo zusammen,

folgende Situation:
auf eine Tabelle wird aus einer Multithreaded-Anwendung zugegriffen.
Alle Select Operationen sind ohne Transaktion, alle Updates oder Inserts mit Transaktionen.

Es kommt recht häufig vor, dass eine Select Anweisung viel Zeit kostet, da diese wartet, bis ein gesperrter Datensatz freigegeben wird.

Dazu kommen ein paar Trigger die nach Update oder Insert wiederum selber Updates auslösen.

Im Zusammenspiel dieser Faktoren kommt es hin und wieder zu einem Deadlock.
Alles nicht so tragisch, die Datenbank wählt einen Prozess als Opfer und löst so den Deadlock auf.

Unschön ist dies natürlich trotzdem und ich möchte die Deadlocks beseitigen.

Diesbezüglich hab ich mich mit readpast / readuncommitted beschäftigt.
Readpast sollte mir im select alle nicht gesperrten Datensätze zurückliefern.
Readuncommitted sollte alle Datensätze aber mit dirty reads zurückliefern.

Ich habe dieses Zusammenspiel aus Multithreading und Triggern soweit aufgelöst (glaube ich), dass ich denke man könnte die Deadlocks beseitigen, wenn, ja wenn es die Möglichkeit gibt, readpast o.ä. "verfeinert" einzusetzen..
Im Sinne von: Das Select soll Sperren beachten, die durch ein Update verursacht werden, aber es soll Datensätze ignorieren, die gerade durch eine Insert Transaktion gesperrt sind.

Und nun die Frage: geht das? Und wenn ja, wie?

MfG
 
Werbung:
Zurück
Oben