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 :

Temps d'execution de la requête


Sujet :

Oracle

  1. #1
    Nouveau membre du Club
    Inscrit en
    Décembre 2006
    Messages
    34
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 34
    Points : 25
    Points
    25
    Par défaut Temps d'execution de la requête
    Bonjour,

    Je dois récupérer le temps écoulé depuis le debut de l'heure courante. C'est à dire que :
    - si il est 12H45. Je doit renvoyer 45mn soit en heure 0.75
    - si il est 12H30. Je doit renvoyer 45mn soit en heure 0.5.
    - si il est 12H38......

    Ma requete est donc la suivante :
    SELECT ((SYSDATE - TO_DATE(TO_CHAR(SYSDATE,'DD/MM/YYY HH24'),'DD/MM/YYY HH24'))*24) FROM DUAL

    Cette requete est dans une forme 10g et semble ralentir le systême.
    Est-il possible d'optimiser cette requete? Si oui comment ?

    Merci

  2. #2
    Membre régulier
    Homme Profil pro
    Intégrateur
    Inscrit en
    Novembre 2004
    Messages
    139
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Intégrateur
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Novembre 2004
    Messages : 139
    Points : 86
    Points
    86
    Par défaut
    Bonjour,

    Connais-tu la fréquence à laquelle cette requête est exécutée ?

  3. #3
    Membre régulier
    Homme Profil pro
    Intégrateur
    Inscrit en
    Novembre 2004
    Messages
    139
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Intégrateur
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Novembre 2004
    Messages : 139
    Points : 86
    Points
    86
    Par défaut
    Si j'ai bien compris, une approximation peut être :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    SELECT TO_CHAR(SYSDATE,'MI')/60
    FROM dual
    Par contre, j'ai un doute que ta requête soit à l'origine de la surcharge système... A moins quelle soit exécutée ttes les 5ms

  4. #4
    McM
    McM est déconnecté
    Expert éminent

    Homme Profil pro
    Développeur Oracle
    Inscrit en
    Juillet 2003
    Messages
    4 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Oracle

    Informations forums :
    Inscription : Juillet 2003
    Messages : 4 580
    Points : 7 740
    Points
    7 740
    Billets dans le blog
    4
    Par défaut
    ou alors
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT SYSDATE - TRUNC(SYSDATE, 'HH24')
    FROM dual
    More Code : More Bugs. Less Code : Less Bugs
    Mon Blog PL/Sql : Fichier Zip / Image BMP / Lire sqliteDB / QRCode et Images PNG ou BMP

  5. #5
    Membre régulier
    Homme Profil pro
    Intégrateur
    Inscrit en
    Novembre 2004
    Messages
    139
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Intégrateur
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Novembre 2004
    Messages : 139
    Points : 86
    Points
    86
    Par défaut
    Citation Envoyé par McM
    ou alors
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT SYSDATE - TRUNC(SYSDATE, 'HH24')
    FROM dual
    Si on veut jouer les puristes, cette dernière requête n'est pas consistente car elle fait appel deux fois à SYSDATE qui peut être de valeur différente...
    Il faut préférer une requête avec un unique appel à SYSDATE...

    Cela ne portera pas, de toute manière, à conséquence ...

    A+

  6. #6
    McM
    McM est déconnecté
    Expert éminent

    Homme Profil pro
    Développeur Oracle
    Inscrit en
    Juillet 2003
    Messages
    4 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Oracle

    Informations forums :
    Inscription : Juillet 2003
    Messages : 4 580
    Points : 7 740
    Points
    7 740
    Billets dans le blog
    4
    Par défaut
    Citation Envoyé par cquilgars
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    SELECT TO_CHAR(SYSDATE,'MI')/60
    FROM dual
    Si on veut jouer les puristes à fond, tu divises un CHAR par un nombre.
    More Code : More Bugs. Less Code : Less Bugs
    Mon Blog PL/Sql : Fichier Zip / Image BMP / Lire sqliteDB / QRCode et Images PNG ou BMP

  7. #7
    Membre régulier
    Homme Profil pro
    Intégrateur
    Inscrit en
    Novembre 2004
    Messages
    139
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Intégrateur
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Novembre 2004
    Messages : 139
    Points : 86
    Points
    86
    Par défaut
    La conversion est implicite... Mais le TO_NUMBER peut en effet lever le doute pour l'opération ariméthique...

    Ma remarque sur SYSDATE était purement un cas d'école... Mais j'en ai fait les frais il y a quelques années de cela sous un Oracle 7 sur un niveau de précision supérieur à la seconde...

    Du coup, lorsque une requete nécessite plusieurs sysdate, en fonction du cas, je pense souvent à cette solution pour assurer une consistance fonctionnelle...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    SELECT blabla, blala, t.madate bla,bla,bla t.madate (sous-entendu la même), blabla
    FROM (SELECT SYSDATE as madate FROM dual) t, MaTable1, MaTable2
    Voila pour mon retour d'expérience

    A+

  8. #8
    McM
    McM est déconnecté
    Expert éminent

    Homme Profil pro
    Développeur Oracle
    Inscrit en
    Juillet 2003
    Messages
    4 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Oracle

    Informations forums :
    Inscription : Juillet 2003
    Messages : 4 580
    Points : 7 740
    Points
    7 740
    Billets dans le blog
    4
    Par défaut
    Je comprend le souci sur le sysdate. Le mieux est d'avoir une variable p_sysdate initialisée.

    Le cas du select from (select sydate), je suis pas sur à 100%

    Explication :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT D100 AS premier_dé, D100 AS second_dé
    FROM (
    	SELECT TRUNC(dbms_random.value(1,100)) AS D100
    	FROM dual
    	)
    Résultat :
    PREMIER_DÉ 70
    SECOND_DÉ 31

    Le sous select est appelé 2 fois !!

    Le test avec des SYSTIMESTAMP renvoie la même valeur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT systimestamp, systimestamp
    FROM dual
    WHERE exists (select count(*) from GrosseTable
    More Code : More Bugs. Less Code : Less Bugs
    Mon Blog PL/Sql : Fichier Zip / Image BMP / Lire sqliteDB / QRCode et Images PNG ou BMP

  9. #9
    Membre régulier
    Homme Profil pro
    Intégrateur
    Inscrit en
    Novembre 2004
    Messages
    139
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Intégrateur
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Novembre 2004
    Messages : 139
    Points : 86
    Points
    86
    Par défaut
    Merci pour cette info...
    Ma malheureuse expérience venait d'une version sous Oracle 7 (1997 10 ans déjà ...)

    A+

Discussions similaires

  1. Recuperer le temps d'execution d'une requête
    Par chris0938 dans le forum Décisions SGBD
    Réponses: 1
    Dernier message: 24/06/2010, 16h10
  2. Temps d'execution d'une requête
    Par chris_013 dans le forum PL/SQL
    Réponses: 6
    Dernier message: 10/12/2008, 08h53
  3. Temps d'execution d'une requête
    Par T-nia dans le forum Requêtes
    Réponses: 7
    Dernier message: 29/06/2008, 15h57
  4. Réponses: 1
    Dernier message: 25/06/2007, 09h35
  5. Temps d'execution d'une requête
    Par Maglight dans le forum Bases de données
    Réponses: 3
    Dernier message: 27/01/2005, 08h38

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