|
Publicité ' | |||||||||||||||||||||||
|
|
#1 |
|
Candidat au titre de Membre du Club
![]() Inscription : août 2007 Messages : 22 ![]() |
Bonjour,
j'utilise un serveur d'application Jonas avec un serveur PostgreSql. Mes deux serveurs tournent sur la même machine Linux. Il arrive que certaines requêtes envoyées par Jonas plantent (duplicate key...) ce qui est normal si l'on envoie n'importe quoi. Le souci que je rencontre, c'est que le processus qui a fait s'exécuter la requête en erreur reste actif, bloquant ainsi les insert et update suivant qui restent en attente. Savez vous s'il existe un paramètrage permettant d'arrêter un processus en cas d'erreur? Exemple de processus bloquant les suivant: postgres 32530 4966 0 Aug21 ? 00:00:01 postgres: postgres R7_TOTO 127.0.0.1(39275) idle in transaction postgres 32553 4966 0 Aug21 ? 00:00:03 postgres: postgres R7_TOTO 127.0.0.1(35128) insert waiting postgres 32611 4966 0 Aug21 ? 00:00:00 postgres: postgres R7_TOTO 127.0.0.1(56913) update waiting Dans ce cas les insert et update ne sont jamais exécutés, il faut tuer le processus bloqué à la main pour débloquer la situation, pas top :-) Merci d'avance pour vos réponses |
|
|
00
|
|
|
#3 |
|
Candidat au titre de Membre du Club
![]() Inscription : août 2007 Messages : 22 ![]() |
Bonjour,
ce n'est pas réellement l'origine du plantage qui me pose problème, en effet si je me rend compte qu'une transaction est bloquée, je kill le processus, je debug la transaction et le problème est résolu, à l'exécution suivante tout se passe bien. Ce qui me gène, c'est que la transaction empêche d'autres actions utilisateurs de s'exécuter, je cherche donc un moyen qu'après le plantage le processus linux soit libéré. D'après ce que j'ai vu sur différents forums, il faudrait peut être que je code un rollback explicite en cas de plantage de ma transaction (dans un DAO pour mon architecture). Qu'en pensez vous? Merci |
|
|
00
|
|
|
#4 |
|
Membre éclairé
![]() Inscription : janvier 2005 Messages : 336 ![]() |
Dans votre transaction il faut bien sur un COMMIT ou ROLLBACK ou utiliser des SAVEPOINT, c'est pour cela que je vous demandais de voir votre code, afin de regarder comment vous récupérez les erreurs retournés par les requêtes.
Si vous ne gérez pas vous même ce genre d'erreur, le serveur ne le fera pas à votre place. D'ailleurs le processus Linux n'est pas planté il attend la suite, un éventuel COMMIT ou ROLLBACK ou une autre requête (et il ne faut surtout pas le killer ce qui pourrais faire planter complètement votre PostgreSQL).
__________________
Christophe Chauvet (KrysKool) |
|
|
00
|
|
|
#5 |
|
Candidat au titre de Membre du Club
![]() Inscription : août 2007 Messages : 22 ![]() |
j'utilise un socle technique maison, je pensais qu'une couche d'abstraction gérait les COMMIT et ROLLBACK, je vais vérifier. Je vous tiens au courant.
|
|
|
00
|
|
|
#6 |
|
Candidat au titre de Membre du Club
![]() Inscription : août 2007 Messages : 22 ![]() |
Effectivement, il y a avait une coquille dans le code, dans certains cas d'erreurs, il manquait un ROLLBACK. Merci
|
|
|
00
|
Copyright © 2000-2012 - www.developpez.com