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

SQL Oracle Discussion :

Optimisation du temps d'exécution


Sujet :

SQL Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Inscrit en
    Avril 2007
    Messages
    360
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 360
    Par défaut Optimisation du temps d'exécution
    salut,
    j'ai ecri un code en java dans lequel j'insere dans la base de donnée oracle 10g plusieurs enregistrement parfois il depasse 1000 instruction d'insert, mon systeme commence a augumenté son temps de reponse, parfois 4 min 3 min et plus...
    mon objectfis c'est que comment je peux le rendre un peu plus rapide??
    une methode qui peuvent lancer mes inserts un peu vite

  2. #2
    Membre émérite
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    500
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2007
    Messages : 500
    Par défaut
    Tu ne peux pas regrouper tous tes INSERT en un seul ?
    Il vaut mieux faire 1 INSERT de 1000 lignes que 1000 INSERT de 1 ligne...

    Sinon, balance tes données au fur et à mesure dans des collections (TYPE TABLE), et à la fin tu fais un INSERT avec l'instruction FORALL :
    http://sheikyerbouti.developpez.com/...age=Chap5#L5.5

  3. #3
    Rédacteur
    Avatar de Vincent Rogier
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    2 373
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 2 373
    Par défaut
    Cela dépend aussi comment sont passées les requêtes...

    si tu formates et exécutes (parse/exec) la même requête 1000 fois c'est clair que c'est pas optimisé...

    J'espère que tu prépares ton appel une fois par un PreparedStatement et que ensuite tu bindes les valeurs et ne fais que que réexécuter le statement...

    De plus, l'Array interface est dispo en JDBC...

    Donnes nous plus d'infos !
    Vincent Rogier.

    Rubrique ORACLE : Accueil - Forum - Tutoriels - FAQ - Livres - Blog

    Vous voulez contribuer à la rubrique Oracle ? Contactez la rubrique !

    OCILIB (C Driver for Oracle)

    Librairie C Open Source multi-plateformes pour accéder et manipuler des bases de données Oracle

  4. #4
    Membre émérite Avatar de philcero
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Septembre 2007
    Messages
    528
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Architecte de système d'information
    Secteur : Conseil

    Informations forums :
    Inscription : Septembre 2007
    Messages : 528
    Par défaut
    Passes en mode BULK ça devrait dépoter

    Regardes cet article : http://www.oracle-base.com/articles/...ocessing9i.php

  5. #5
    Rédacteur
    Avatar de Vincent Rogier
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    2 373
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 2 373
    Par défaut
    Citation Envoyé par philcero Voir le message
    Passes en mode BULK ça devrait dépoter

    Regardes cet article : http://www.oracle-base.com/articles/...ocessing9i.php
    opensource a dit qu'il codait en JAVA , PAS en PL/SQL....
    Vincent Rogier.

    Rubrique ORACLE : Accueil - Forum - Tutoriels - FAQ - Livres - Blog

    Vous voulez contribuer à la rubrique Oracle ? Contactez la rubrique !

    OCILIB (C Driver for Oracle)

    Librairie C Open Source multi-plateformes pour accéder et manipuler des bases de données Oracle

  6. #6
    Membre éclairé
    Inscrit en
    Avril 2007
    Messages
    360
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 360
    Par défaut
    bjr,
    Merci pour les informations, comme c'est confirmé par vicenzo, je code avec java, juste selon la citation de dgi77
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Sinon, balance tes données au fur et à mesure dans des collections (TYPE TABLE), et à la fin tu fais un INSERT avec l'instruction FORALL :
    je vais consulter le lien.
    mon code et le voila
    j'ai des boucles en java dans lesquelles je recupere mes valeurs et puis je vais une insert à chaque iteration .
    voila mon code meme si il est un peu long
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
        /** ===>>> Fonction de Calcul de la Valeur du Ratio **/
        private void mCalculer_actionPerformed(ActionEvent e) {
     
            String Modele = mModeleDesc.getText();
            String Date_debut = mDateDebut.getText();
            String Date_Fin = mDateFin.getText();
            String Requete_Insert = RequeteInsert_Data_Ratio;
            String Values = "";
            Vector V_Error = new Vector();
     
            /** Initialisation de table des Erreurs **/
            InitTableRatiosErronés();
            mModelRatioErronés.chargerVector(V_Error, vRatioErronesCols,vRatioErroneClasses);
     
            if( !Modele.equals("") && !Date_debut.equals("") && !Date_Fin.equals("") ) {
     
                /** Controle Des valeurs de dates   **/
                ControleDate(Date_debut, Date_Fin);         
                int Begin_Date = Integer.parseInt(Date_debut.split("/")[2]);
                int End_Date = Integer.parseInt(Date_Fin.split("/")[2]);
     
                /** Test Sur l'existance d'au moins un Ratio **/
                if( mTableRatioTraitement.getRowCount() >= 1 ){ 
     
                    /** ==>> Parcour de la Table des Ratios **/
                    for( int i = 0; i < mTableRatioTraitement.getRowCount(); i++ ){
     
                        if( mTableRatioTraitement.getValueAt(i,0) != null ) {
     
                              boolean Choix = (Boolean)mTableRatioTraitement.getValueAt(i,0);
     
                              /** Test sur la selection  d'un Ratio et l'existance d'une Societe **/
                              if( Choix == true && mTableSocieteTraitement.getRowCount() > 0 ){
                                     String Code_Ratio = mTableRatioTraitement.getValueAt(i,1).toString();
     
                                    /** ==>> Parcour de la Table Societe  **/
                                    for( int j = 0; j < mTableSocieteTraitement.getRowCount(); j++){
     
                                        if( mTableSocieteTraitement.getValueAt(j,0) != null && (Boolean)mTableSocieteTraitement.getValueAt(j,0) == true){
     
                                            String Societe = mTableSocieteTraitement.getValueAt(j,1).toString();
                                            String Formule_Ratio = GetFormule_Ratio(Code_Ratio,Modele);
                                            int k = 0;
                                            goTo_While : while((Begin_Date + k) <= End_Date ) { //===>>> Marge des Dates : Insertion pour les differentes dates
     
                                                int exist = IsTrouve_Ratio_Societe(Modele,Societe,Code_Ratio,Integer.toString((Begin_Date + k)));
     
                                                /** ==>>> le Ratio n'est pas Calculé pour la societe **/
                                                if( exist == 0 ) {  
     
                                                    Pattern pattern = Pattern.compile("("+Symbols+")|("+numbers+")|("+strings+")");
                                                    Matcher matcher = pattern.matcher(Formule_Ratio);
                                                    String Evaluer_Formule = "";
                                                    String Date_Ratio = String.valueOf(Begin_Date + k);  
                                                    double Valeur_Ratio = 0;
     
                                                   /**  ===>>> Parcour de la Formule   **/    
                                                    while ( matcher.find() ) { 
     
                                                       String Element = matcher.group();
                                                       String test_element = Element.trim().substring(0,1);
     
                                                       if( test_element.equals(":") ){
     
                                                              String val = GetValeur_Compte(Element.split(":")[1],Modele,Societe,Date_Ratio);
     
                                                              if ( val.equals("") ) {
                                                                Evaluer_Formule += "0.00";
                                                              } else {
                                                                  Evaluer_Formule += val;
                                                              }
     
                                                       } else {
                                                            Evaluer_Formule += Element;
                                                       }
                                                    }
     
                                                    /**  Bibliothèque du Calcul  **/                                           
                                                    Jep jep = new Jep();
                                                    try {
     
                                                          Requete_Insert = RequeteInsert_Data_Ratio;
                                                          Values = "";
                                                          jep.parse(Evaluer_Formule);
                                                          String valeur = jep.evaluate().toString();
     
                                                          /**  ===>>> Cas Erreur de calcul   **/                                         
                                                          if( valeur.trim().equals("Infinity") || valeur.trim().equals("NaN") ){ 
     
                                                              Vector v = new Vector();
                                                              v.add(Code_Ratio);v.add(Societe);v.add(valeur);v.add("31/12/" +(Begin_Date + k));
                                                              V_Error.add(v);
                                                              k++;
                                                              continue goTo_While;
     
                                                          } else {
                                                              Valeur_Ratio = Double.parseDouble(valeur);
                                                              Values = " VALUES ("+Modele+",'"+Code_Ratio.trim()+"','"+Societe.trim()+"',TO_DATE('31/12/"+Date_Ratio.trim()+"','dd/mm/yyyy') ,"+Valeur_Ratio+")";
                                                              Requete_Insert += Values;
                                                             // System.out.print("\n Requete_Insert " + Requete_Insert + "\n\n");
                         // Insertion dans la table                                     boolean ok = mDBaccess.execute_req_insert_update_con_commit(Requete_Insert);
                                                             // System.out.print("\n okokokok " + ok + "\n\n");
                                                          }  
                                                     }catch(JepException ex){
                                                        System.out.print( ex.toString() + "*****" + ex.getMessage() );  
                                                     }
                                                      k++;
                                              } else {
                                                  k++;
                                              }
     
                                          }// fin while  
                                       }
                                     } 
                                   }
                           }
                   }
                }
    Merci pour les informations

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

Discussions similaires

  1. optimisation en temps d'exécution d'un tri
    Par Dereck07 dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 01/03/2008, 18h49
  2. [datenum] Optimiser le temps d'exécution
    Par xduris dans le forum MATLAB
    Réponses: 11
    Dernier message: 08/08/2007, 16h07
  3. Optimisation du temps d'exécution d'une requête
    Par LeNovice dans le forum DB2
    Réponses: 6
    Dernier message: 12/07/2007, 13h47
  4. optimiser le temps d'exécution de l'explorateur windows
    Par ben_iap dans le forum Autres Logiciels
    Réponses: 6
    Dernier message: 31/01/2006, 22h04
  5. Réponses: 9
    Dernier message: 20/06/2005, 12h17

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