Codierungsrichtlinien zum Vermeiden von Deadlocks
Es empfiehlt sich, die Informationen, auf die zugegriffen werden soll, in einer bestimmten Reihenfolge zu sortieren, bevor Sperren angefordert werden. So können Sie das Deadlockproblem umgehen.
Deadlock bezeichnet eine bestimmte Bedingung in einer Datenbank, bei der zwei Prozesse darauf warten, dass der jeweils andere Prozess eine Ressource freigibt. Wenn eine Clientanwendung beispielsweise eine Sperre für eine Tabelle hält und versucht, die Sperre für eine zweite Tabelle abzurufen, die von einer anderen Clientanwendung gehalten wird, kann dies zu einem Deadlock führen, wenn die andere Anwendung versucht, die Sperre abzurufen, die von der ersten Anwendung gehalten wird.
Die Sortierung von Informationen für einen bestimmten Auftrag gilt für Situationen, in denen Sie Sperren für mehrere Bestandsartikel für eine einzige Transaktion benötigen. Wenn Sie die APIs aufrufen, um pro Commitoperation einer Transaktion nur ein Element zu verarbeiten, müssen Sie jedoch nicht sortieren.
Lesen nicht festgeschriebener Daten in DB2® -Datenbank
Wenn Sie in Db2einen Datensatz aus einer Tabelle auswählen, wird eine Lesesperre für den Datensatz angefordert. Wenn der ausgewählte Datensatz aktualisiert, aber nicht festgeschrieben wird, wartet der Thread, bis er die Änderungen festschreibt. Alternativ können Sie den Datensatz mit UR (Uncommitted Read, nicht festgeschriebener Lesevorgang) lesen. In diesem Fall wird dem Benutzer der letzte aktualisierte Wert bereitgestellt.
Sie können nicht festgeschriebene Daten über jede Listen-API lesen, indem Sie das Attribut "ReadUncommitted" mit dem Wert "Y" im zugehörigen Eingabe-XML aktivieren. Dazu müssen Sie die einzelnen JavaServer Pages anpassen und das Attribut "ReadUncommitted" als ausgeblendetes Attribut übergeben. Beispiel:
<input type="hidden" name="xml:/Order/@ReadUnCommitted" value="Y"/>
Daher wird das Sperrszenario in der Db2 -Datenbank umgangen. Sperren ist die Standardeinstellung in DB2.
Dieses Attribut muss nicht zwingend übergeben werden. Wenn Sie jedoch den Wert "Y" für dieses Attribut angeben, wird das Lesen nicht festgeschriebener Daten durch das System erzwungen. Mit der Transaktion T1 wird beispielsweise die Tabelle "TAB-1" aktualisiert. Die Daten der Transaktion werden jedoch nicht festgeschrieben. Wenn für das Attribut "ReadUncommitted" der Wert "Y" festgelegt wird, können die nicht festgeschriebenen Daten in der Tabelle "TAB-1" in anderen Transaktionen gelesen werden.
Bewerten Sie gleichzeitig ablaufende Transaktionen, bevor Sie dieses Attribut festlegen. So können Sie bestimmen, ob es zu einer Situation kommt, in der ein Deadlock auftritt. Wenn keine solche Situation auftritt, muss das Flag auf der Standardeinstellung bleiben.