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

Oracle Discussion :

Problème de performance Update de 60 mille lignes.


Sujet :

Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Septembre 2005
    Messages
    51
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 51
    Par défaut Problème de performance Update de 60 mille lignes.
    bonjour a tous,
    Problème: La mise à jour de 60 000 lignes met entre 3H et 4H !!!
    Objectif: Mettre à jour chaque enregistrement selon des valeurs récupéré par une requête chaque enregistrement.

    Au début j'avais crée un curseur constituant ma sélection pour effectué la MAJ de chaque enregistrement dans une boucle.
    Résultat éffectué en 3H-4H.

    Ce temp d'éxecution étant trop long (vous en conviendrez) ma permis de rechercher une autre solution et j'ai trouvé le paramètre BULK COLLECT.
    J'ai donc recommencé ma procédure stockée avec:
    - ma sélection renvoyant les différentes valeurs dans des tables (précédemment déclaré) du style:
    section DECLARE :

    * TYPE MA_TABLE IS TABLE TABLE_EXISTANTE.COLONNE%TYPE
    mytab MA_TABLE

    section BEGIN :
    * SELECT CHAMP1 BULK COLLECT INTO mytab FROM TABLE
    WHERE CRITERE...

    * FORALL i IN 1..mytab.COUNT
    UPDATE TABLEMAJ
    SET COLONNE = mytable.colonne
    WHERE CONDITION;

    COMMIT;

    Aussi, le serveur utilisé (en production) est avec la version Oracle 8i mais les résultats sont les même sur le serveur de test (Oracle 10g).

    Si vous savez d'où viens le problème !
    Parce que là je séche !!!

    merci

  2. #2
    Expert confirmé
    Avatar de SheikYerbouti
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    6 760
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 6 760
    Par défaut
    Qu'est-ce qui prend du temps : le select du curseur ou l'update derrière ?

    Il y a t-il des triggers sur la table ?

  3. #3
    Expert éminent
    Avatar de orafrance
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    15 967
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Par défaut
    Faudrait ajouter une LIMIT au BULK... il y a peut-être des contentions en mémoire.

  4. #4
    Membre averti
    Inscrit en
    Septembre 2005
    Messages
    51
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 51
    Par défaut
    Je pense que c'est l'update qui est long mais cela est de la pure supposition.

    Oui il y a une trigger sur la table lors de l'insertion, mais ma procédure stockée est executer une fois les données insérées.

    Dans mes docs oracle je n'ai bien compris l'utilisation de LIMIT.
    Peux tu m'expliquer son utilité ?

    merci d'avance

  5. #5
    Expert confirmé
    Avatar de SheikYerbouti
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    6 760
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 6 760
    Par défaut
    Cela permet de procéder par "tranches" ou "paquets" afin de ne pas exploser le rollback segment, par example.

  6. #6
    Expert confirmé
    Avatar de SheikYerbouti
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    6 760
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 6 760
    Par défaut
    autrement, c'est quoi la condition de l'update ?
    Sinon, une technique est de ramener le ROWID dans la table PL/SQL et de l'utiliser dans le FORALL

  7. #7
    Expert éminent
    Avatar de orafrance
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    15 967
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Par défaut
    il permet de définir la taille des lots pour faire un traitement par tranche

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

Discussions similaires

  1. Problème de performance avec mes requêtes update
    Par Battosaiii dans le forum PL/SQL
    Réponses: 19
    Dernier message: 03/08/2011, 09h38
  2. [jeu]problème de performance d'un algo
    Par le Daoud dans le forum Algorithmes et structures de données
    Réponses: 12
    Dernier message: 30/05/2005, 16h07
  3. [C#] Probléme de performance avec IsDbNull
    Par jab dans le forum Windows Forms
    Réponses: 8
    Dernier message: 04/04/2005, 11h39
  4. [oracle 9i][Workbench]Problème de performance
    Par nuke_y dans le forum Oracle
    Réponses: 6
    Dernier message: 03/02/2005, 17h38
  5. [ POSTGRESQL ] Problème de performance
    Par Djouls64 dans le forum PostgreSQL
    Réponses: 6
    Dernier message: 26/05/2003, 16h18

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