IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PostgreSQL Discussion :

transaction bloquée dans un processus linux


Sujet :

PostgreSQL

  1. #1
    Membre à l'essai

    Profil pro
    Inscrit en
    Août 2007
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 21
    Points : 24
    Points
    24
    Par défaut transaction bloquée dans un processus linux
    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

  2. #2
    Membre averti

    Homme Profil pro
    Inscrit en
    Janvier 2005
    Messages
    338
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 338
    Points : 404
    Points
    404
    Par défaut
    Bonjour

    Pourriez vous nous montrer la partie du code qui pose problème ?

  3. #3
    Membre à l'essai

    Profil pro
    Inscrit en
    Août 2007
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 21
    Points : 24
    Points
    24
    Par défaut
    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

  4. #4
    Membre averti

    Homme Profil pro
    Inscrit en
    Janvier 2005
    Messages
    338
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 338
    Points : 404
    Points
    404
    Par défaut
    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).

  5. #5
    Membre à l'essai

    Profil pro
    Inscrit en
    Août 2007
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 21
    Points : 24
    Points
    24
    Par défaut
    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.

  6. #6
    Membre à l'essai

    Profil pro
    Inscrit en
    Août 2007
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 21
    Points : 24
    Points
    24
    Par défaut
    Effectivement, il y a avait une coquille dans le code, dans certains cas d'erreurs, il manquait un ROLLBACK. Merci

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [AC-2003] Requête sql avec méthode DoCmd.Runsql bloqué dans une transaction
    Par rana dans le forum Requêtes et SQL.
    Réponses: 1
    Dernier message: 09/03/2010, 14h20
  2. Réponses: 2
    Dernier message: 22/07/2009, 15h13
  3. [XUP] 2up ou XP ou bien les deux dans le processus de développement
    Par nabilblk dans le forum Méthodes Agiles
    Réponses: 4
    Dernier message: 01/11/2007, 20h58
  4. Détection automatique d'1 appli dans les processus
    Par FredericB dans le forum C++Builder
    Réponses: 2
    Dernier message: 01/02/2006, 00h38
  5. [TRANSACTION] Erreur dans requete
    Par Tchinkatchuk dans le forum Langage SQL
    Réponses: 7
    Dernier message: 26/05/2005, 18h38

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo