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 :

[Postgres 8] Problème d'update


Sujet :

PostgreSQL

  1. #1
    Membre du Club
    Inscrit en
    Juin 2004
    Messages
    143
    Détails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 143
    Points : 56
    Points
    56
    Par défaut [Postgres 8] Problème d'update
    Bonjour,

    J'étais sous postgres 7.2 et depuis que j'ai migré sous postgres 8 toutes mes requêtes "UPDATE" rament.

    La simple mise à jour d'un champs sur 200 000 enregistrement prend 1h.
    (2 requetes update)

    De plus, sous postgres 7 je n'avais même pas d'index pour faire que la reqête aille plus vite.
    J'en ai mis sous postgres 8.

    Enfin j'ai configuré le fichier de conf de postgres 8 à -> index_scan true;

    Une idée du problème ?

  2. #2
    Expert éminent
    Avatar de GrandFather
    Inscrit en
    Mai 2004
    Messages
    4 587
    Détails du profil
    Informations personnelles :
    Âge : 54

    Informations forums :
    Inscription : Mai 2004
    Messages : 4 587
    Points : 7 103
    Points
    7 103
    Par défaut Re: [Postgres 8] Problème d'update
    Bonjour,

    Citation Envoyé par julienOriano
    De plus, sous postgres 7 je n'avais même pas d'index pour faire que la reqête aille plus vite.
    J'en ai mis sous postgres 8.
    L'index accélère certes la recherche de l'enregistrement à modifier définie dans la clause WHERE, mais ralentit l'UPDATE puisque l'index est mis à jour en même temps que la base (à condition que le(s) champ(s) mis à jour soi(en)t impliqué(s) dans l'index). Cela expliquerait le ralentissement, plutôt que le passage à PostgreSQL 8...
    FAQ XML
    ------------
    « Le moyen le plus sûr de cacher aux autres les limites de son savoir est de ne jamais les dépasser »
    Giacomo Leopardi

  3. #3
    Membre du Club
    Inscrit en
    Juin 2004
    Messages
    143
    Détails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 143
    Points : 56
    Points
    56
    Par défaut
    merci ! J'aurai au moins appris quelque choses !

    Mais les index impliqués dans la mise à jour de cette table ne contiennent pas les données mises à jour (1 seul champs mis à jour)

    Cela ne pourrait il pas venir du Recyclage du journal de transaction !
    En effet, avant l'update je fais 200 000 insert dans un block BEGIN,COMMIT

    Penadant mon upadte, j'ai des Recyclage du journal de transaction «0000034A00000068»
    Il y en a pas mal !

  4. #4
    Membre du Club
    Inscrit en
    Juin 2004
    Messages
    143
    Détails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 143
    Points : 56
    Points
    56
    Par défaut
    Y a til un moyen simple pour optimiser les requetes d update (conf de postgres ou autre) !
    Je ne trouve rien !

    Merci

  5. #5
    Expert éminent
    Avatar de GrandFather
    Inscrit en
    Mai 2004
    Messages
    4 587
    Détails du profil
    Informations personnelles :
    Âge : 54

    Informations forums :
    Inscription : Mai 2004
    Messages : 4 587
    Points : 7 103
    Points
    7 103
    Par défaut
    Une possibilité, mais en aucun cas une garantie : utiliser une requête préparée (prepared query).

    La préparation de la requête se fait avec la commande PREPARE. Par exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    PREPARE my_plan (text, int4) AS UPDATE my_table SET my_field = $1 WHERE my_id = $2;
    my_plan est une chaîne arbitraire qui désigne la requête préparée. Les types de données qui suivent sont les paramètres passés à la requête, désignés dans la requête elle-même par $1 et $2.

    Pour exécuter la requête n fois, il suffit d'appeler n fois EXECUTE en passant le nom de la requête préparée et les valeurs des paramètres :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    EXECUTE my_plan ('my value', 12345);
    La requête ayant déjà été parsée, compilée, planifiée lors du PREPARE, son exécution devrait être plus rapide que si elle avait été transmise directement au back-end. Il est quand même conseillé de faire un ANALYZE avant le PREPARE pour mettre à jour les statistiques et que la planification soit optimale.
    FAQ XML
    ------------
    « Le moyen le plus sûr de cacher aux autres les limites de son savoir est de ne jamais les dépasser »
    Giacomo Leopardi

Discussions similaires

  1. [MySQL] problème requête UPDATE
    Par oceane751 dans le forum PHP & Base de données
    Réponses: 8
    Dernier message: 23/10/2005, 18h28
  2. problème de Update
    Par cyrill.gremaud dans le forum ASP
    Réponses: 7
    Dernier message: 29/08/2005, 20h58
  3. [C#] [Oracle] Problème d'Update
    Par _Air_ dans le forum Windows Forms
    Réponses: 12
    Dernier message: 06/04/2005, 13h56
  4. Problème requete update
    Par krfa1 dans le forum Langage SQL
    Réponses: 2
    Dernier message: 29/03/2005, 08h47
  5. problème pour updater une BD
    Par yoda_style dans le forum ASP
    Réponses: 6
    Dernier message: 17/03/2005, 10h56

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