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 Firebird Discussion :

Temps execution procédure stockée FB 2.1


Sujet :

SQL Firebird

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    291
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 291
    Par défaut Temps execution procédure stockée FB 2.1
    Bonjour,

    Voici le code d'une procédure stockée
    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
    /*
                
                              
      Params
      ------
      <param>  : <purpose>
    */
    declare variable trbn char(4);
    declare variable num_trbn integer;
    declare variable dt_ok timestamp;
    declare variable dt_arret timestamp;
     
     
    begin
        num_trbn=1;  
        /*Parcours des turbines */
        while (num_trbn<=NB_TURBINE) do
        begin
             REF_TURBINE_VALOREM='';  
              trbn='T'||cast(num_trbn as varchar(2));
              /*recupere les dernieres infos dans la table status où le numéro de groupe est différent de 25*/
              select first 1 S.REF_TURBINE_VALOREM,S.CODE_STATUS,S.NOM_STATUS,C.COULEUR_MARQUEUR from STATUS S inner join CONFIG_STATUS C
              on C.CODE_STATUS=S.CODE_STATUS and S.NOM_PROJET=:PRJT and S.REF_TURBINE_VALOREM=:trbn and C.NOM_PROJET=:PRJT
              and C.NUM_GROUPE<>'25'
              order by DEBUT_STATUS desc into :REF_TURBINE_VALOREM,:CODE_STATUS,:NOM_STATUS,:COULEUR;          
              /*récupere la couleur correspondant au code status */
              /*select COULEUR_MARQUEUR from  CONFIG_STATUS where CODE_STATUS=:CODE_STATUS and NOM_PROJET=:PRJT into :COULEUR;           */
              /*si le code status n'est pas 0 il faut rechercher le dernier arret pour voir si la machine */
              /*ne devrait tuojours pas etre dans cet état car elle n'aurait pas redémarré (status OK)                 */
              if (CODE_STATUS<>'0') then
              begin
                 /*recherche du 1er arret */
                 select first 1 DEBUT_STATUS from STATUS where FAMILLE_CALC_MAIN_COURANTE='ARRET'
                 and NOM_PROJET=:PRJT and REF_TURBINE_VALOREM=:trbn order by DEBUT_STATUS desc into :dt_arret ;
                 /*recherche du 1er OK */
                 select first 1 DEBUT_STATUS from STATUS where CODE_STATUS='0'
                 and NOM_PROJET=:PRJT and REF_TURBINE_VALOREM=:trbn order by DEBUT_STATUS desc into :dt_ok;
                 /*si la date de l'arret et plus récente que le status OK alors on imporse la couleur orange */
                 if (dt_ok<dt_arret) then
                    COULEUR='ORANGE';
              end
              /*recupere les dernieres infos dans la table data 10 min                                   */
              select first 1 DATE_HEURE, PUISS_ACTIVE_PRODUITE,VITESSE_VENT_NACELLE from DATA_10MIN where NOM_PROJET=:PRJT and REF_TURBINE_VALOREM=:trbn
                     order by DATE_HEURE desc into :DT_HR,:PRODUCTION,:VIT_VENT;
               if (REF_TURBINE_VALOREM='') then
                  REF_TURBINE_VALOREM=trbn;      
               suspend;         
     
        num_trbn=num_trbn+1;                 
     
        end/*fin du parcours des turbines */
    end
    On voit que la pluspart des requetes demandent un classement par date desc
    Ce que je ne comprends pas c'est que quelque soit ma facon de créer l'index (ASC ou DESC)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    CREATE DESC INDEX I_STATUS_DEBUT_STATUS ON STATUS (DEBUT_STATUS);
    ma procédure prend le meme temps (environ 8sec)
    Or si j'execute les requetes une à une je vais quasiment 10 fois plus vite !!

    Il y a sans aucun doute quelque chose que je dois mal faire mais où??

    Merci

  2. #2
    Membre éclairé
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    291
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 291
    Par défaut
    Apres differents tests j'ai remarqué que si je recompilais la procédure apres avoir changé l'ordre des indexs ca fonctionnait (je divise le temps de la procédure par 4).
    Pourquoi ce phénomène?
    La procédure garde son plan en mémoire peut être et la recompilation fait un "reset"?

    Merci

  3. #3
    Membre Expert

    Homme Profil pro
    Consultant spécialité Firebird
    Inscrit en
    Mai 2002
    Messages
    2 342
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France

    Informations professionnelles :
    Activité : Consultant spécialité Firebird
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 342
    Par défaut
    une procédure est compilée, donc oui le plan est calculé au moment où elle a été compilée, si tu ajoute un index après, elle ne l'utilisera pas, même s'il est meilleur, il faut donc re compiler la procedure (alter procedure)

  4. #4
    Membre éclairé
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    291
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 291
    Par défaut
    Merci Philippe

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

Discussions similaires

  1. Temps éxécution procédure stockée
    Par piff62 dans le forum Administration
    Réponses: 0
    Dernier message: 06/07/2009, 17h07
  2. Réponses: 0
    Dernier message: 17/09/2008, 09h53
  3. Execution procédure stockée dont le nom est en varchar
    Par castaka dans le forum Développement
    Réponses: 2
    Dernier message: 20/05/2008, 14h37
  4. Execution procédure stockée avec un curseur
    Par simo333 dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 07/10/2007, 11h00
  5. Executer procédure stockée base oracle ADOStoredProc
    Par Akei dans le forum Bases de données
    Réponses: 2
    Dernier message: 21/06/2004, 08h46

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