web-dev-qa-db-fra.com

DB2 deadlock timeout Sqlstate: 40001, code de raison 68 en raison des instructions de mise à jour appelées à partir du servlet à l'aide de SQL

J'appelle les instructions de mise à jour l'une après l'autre à partir d'un servlet vers DB2. Je reçois une erreur sqlstate 40001, code de raison 68 que j'ai trouvé dû à un délai d'attente de blocage.

  • Comment puis-je résoudre ce problème?
  • Peut-il être résolu en définissant le délai d'expiration de la requête?
  • Si oui, alors comment l'utiliser avec les instructions de mise à jour dans le servlet ou où l'utiliser?
11
user1022467

Le code anomalie 68 vous indique déjà que cela est dû à un délai d'expiration de verrouillage (l'impasse est le code anomalie 2). Cela peut être dû à d'autres utilisateurs exécutant des requêtes en même temps qui utilisent les mêmes données auxquelles vous accédez, ou à vos propres mises à jour multiples.

Commencez par exécuter db2pd -db locktest -locks show detail à partir d'une ligne de commande db2 pour voir où se trouvent les verrous. Vous devrez ensuite exécuter quelque chose comme:

select tabschema, tabname, tableid, tbspaceid 
from syscat.tables where tbspaceid = # and tableid = #

en remplissant les symboles # avec le numéro d'identification que vous obtenez du db2pd sortie de la commande.

Une fois que vous voyez où se trouvent les verrous, voici quelques conseils:

FrequencyLa fréquence de verrouillage peut parfois être réduite en garantissant que toutes les applications accèdent à leurs données communes dans le même ordre - ce qui signifie, par exemple, qu'elles accèdent (et donc verrouillent) les lignes du tableau A, suivi du tableau B, puis du tableau C, et bientôt.

extrait de: http://publib.boulder.ibm.com/infocenter/db2luw/v9r7/topic/com.ibm.db2.luw.admin.trb.doc/doc/t0055074.html

lecture recommandée: http://www.ibm.com/developerworks/data/library/techarticle/dm-0511bond/index.html

Addendum: si votre servlet ou une autre application coupable utilise des déclarations select trouvées impliquées dans l'impasse, vous pouvez essayer d'ajouter with ur aux instructions select si l'exactitude des données nouvellement mises à jour (ou insérées) n'est pas importante.

12
MrG