DB2-Deadlock-Timeout Sqlstate: 40001, Ursachencode 68 aufgrund von Update-Anweisungen, die vom Servlet mithilfe von SQL aufgerufen werden

8

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.

  • Wie kann ich dieses Problem lösen?
  • Kann es durch Setzen des Abfrage-Timeouts aufgelöst werden?
  • Wenn ja, wie benutze ich es mit update-Anweisungen in Servlets oder wo verwende ich es?
user1022467 31.10.2011, 18:18
quelle

1 Antwort

11

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:

ausführen %Vor%

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 .

    
brandong 31.10.2011 19:46
quelle

Tags und Links