Ich rufe Aktualisierungsanweisungen nacheinander von einem Servlet zu DB2 auf. Ich erhalte Fehler sqlstate 40001, Ursachencode 68, den ich fand, dass es wegen des Deadlocktimeouts ist.
Der Ursachencode 68 weist Sie bereits darauf hin, dass dies auf ein Sperrzeitlimit zurückzuführen ist (Deadlock ist Ursachencode 2). Dies könnte auf andere Benutzer zurückzuführen sein, die zur gleichen Zeit Abfragen ausführen, die dieselben Daten verwenden, auf die Sie zugreifen Aktualisierungen.
Beginnen Sie, indem Sie db2pd -db locktest -locks show detail
von einer db2-Befehlszeile ausführen, um zu sehen, wo sich die Sperren befinden. Sie müssen dann etwas wie:
Füllen Sie die Symbole # mit der ID-Nummer aus, die Sie von der Befehlsausgabe db2pd
erhalten haben.
Sobald Sie sehen, wo die Sperren sind, hier sind ein paar Tipps:
◦Die Deadlock-Frequenz kann manchmal reduziert werden, indem sichergestellt wird, dass alle Anwendungen auf ihre gemeinsamen Daten in der gleichen Reihenfolge zugreifen - also beispielsweise auf Zeilen in Tabelle A zugreifen, also sperren, gefolgt von Tabelle B, gefolgt von Tabelle C und so weiter.
aus: Ссылка
empfohlen zu lesen: Ссылка
Nachtrag: Wenn Ihr Servlet oder eine andere schuldige Anwendung select
-Anweisungen verwendet, die am Deadlock beteiligt sind, können Sie versuchen, with ur
zu den Select-Anweisungen, wenn die Genauigkeit der neu aktualisierten (oder eingefügten) Daten nicht wichtig ist .
Tags und Links db2