2009-07-20 6 views
3

Mes tests d'applications sont assez difficiles sur la base de données. Ils exécutent créer, supprimer et modifier des instructions de table. Cependant, je m'attendrais toujours à ce que postresql les gère même dans le cas d'un blocage (c'est-à-dire détecter le verrou et lancer un thread). Je ne cours pas les demandes concurremment non plus.Le verrou exclusif PostgreSQL arrête l'application

Cependant, dans mon cas, il se fige et je dois les tuer manuellement manuellement (cela fonctionne si je change légèrement l'ordre de courir, mais cela ne me donne pas confiance). Les verrous montrent qu'une instruction create table a un verrou exclusif et qu'une transaction en a également.

Est-ce que quelqu'un a connu quelque chose de similaire? Y a-t-il des paramètres de serveur qui peuvent aider? Ou juste un conseil? PostgreSQL détecte automatiquement deadlocks

Répondre

7

Très probablement, vous bloquez seulement sur une déclaration quelque part qui n'a pas fini. Un blocage ne se produit que si deux instructions sont en attente l'une de l'autre. Si vous examinez votre "arbre de serrures" jusqu'à la racine (si vous bloquez un blocage à la racine), vous trouverez probablement une transaction qui prend beaucoup de temps, ou qui n'est pas correctement engagé mais se trouve juste en mode "inactif en transaction".

Étant donné que vous mentionnez les unités d'exécution, sachez que toutes les bibliothèques clientes ne sont pas nécessairement threadsafe côté client.

+1

Merci. C'était une transaction inutilisée, http://wiki.dspace.org/index.php/Idle_In_Transaction_Problem, m'a aidé à déboguer ce qui a causé la transaction, même si je ne suis toujours pas sûr que cela arrivera. –

Questions connexes