1. #1
    Membre expérimenté
    Avatar de islamov2000
    Homme Profil pro
    Ingénieur d'études & developpement en informatique
    Inscrit en
    septembre 2007
    Messages
    803
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Ingénieur d'études & developpement en informatique
    Secteur : Industrie

    Informations forums :
    Inscription : septembre 2007
    Messages : 803
    Points : 1 709
    Points
    1 709
    Billets dans le blog
    6

    Par défaut Temps d'éxécution d'une requête dans une procedure stockée.

    Bonjour tout le monde.
    je fait un appel aux compétencex des DBA Oracle.

    je n'arrive pas à comprendre un phénomène. comment une requête SQL qui s’exécute en mode "sqplus" répond plus rapide qu'elle s'est exécute dans une procédure stockée.
    j'ai une requête un peu complexe que j'ai pu l'optimiser, elle répond après quelque secondes.
    par contre quant je l'ai mis dans une procédure, le temps d’exécution est important, c'est plus que 4 minutes.

    Je cherche une explication de votre part.
    Merci
    d'avoir Pensé à voter positivement pour ceux qui vous ont aidés et surtout à mettre si le cas.
    ça encourage.

  2. #2
    Membre éclairé
    Homme Profil pro
    DBA Oracle
    Inscrit en
    avril 2013
    Messages
    804
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : DBA Oracle
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : avril 2013
    Messages : 804
    Points : 823
    Points
    823

    Par défaut

    On peut avoir le résultat de ta requête SQL*Plus et exec de la procédure stockée avec les paramètres suivants?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SQL> set autotrace traceonly explain statistics
    SQL> SET TIMING ON
    DBA Oracle
    Rédacteur du blog : dbaoraclesql.canalblog.com

  3. #3
    Membre expérimenté
    Avatar de islamov2000
    Homme Profil pro
    Ingénieur d'études & developpement en informatique
    Inscrit en
    septembre 2007
    Messages
    803
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Ingénieur d'études & developpement en informatique
    Secteur : Industrie

    Informations forums :
    Inscription : septembre 2007
    Messages : 803
    Points : 1 709
    Points
    1 709
    Billets dans le blog
    6

    Par défaut

    merci pour la réponse Ikebukuro, mais je ne comprend pas ce que tu veux dire.
    d'avoir Pensé à voter positivement pour ceux qui vous ont aidés et surtout à mettre si le cas.
    ça encourage.

  4. #4
    Membre éclairé
    Homme Profil pro
    DBA Oracle
    Inscrit en
    avril 2013
    Messages
    804
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : DBA Oracle
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : avril 2013
    Messages : 804
    Points : 823
    Points
    823

    Par défaut

    De ce que je comprends, tu as un ordre SQL qui s'exécute rapidement sous SQL*Plus et lentement quand cet ordre SQL est dans une procédure stockée.
    Il faudrait que tu lances cet ordre SQL directement sous SQL*Plus pour qu'on voit comment il s'exécute; mais pour ça il faut mettre à jour des paramètres et donc saisir les deux lignes dont je parle.

    Une fois ça OK, on pourra lancer la procédure stockée sous SQL*Plus et on verra les différences.
    DBA Oracle
    Rédacteur du blog : dbaoraclesql.canalblog.com

  5. #5
    Expert éminent sénior Avatar de mnitu
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    octobre 2007
    Messages
    5 570
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : octobre 2007
    Messages : 5 570
    Points : 11 437
    Points
    11 437

    Par défaut

    Il est probable que vous vous trompez et que vous ne comparez pas la même requête. Ou que vous comparez le temps d'affichage d'une quinzaines des enregistrements versus le temps de traitement des tous les enregistrements, etc.

    Pour avancer vous avez besoin d'investiguer ou diagnostiquer. Voilà la démarché:
    • assurez-vous que c'est la même requête dans le deux cases, cela veut dire même session, et même requête! Pl/SQL utilise automatiquement des variables de liaisons là où vous utilisez des variables PL/SQL
    • exécutez la requête avec le hint SQL gather_plan_statistics pour récupérer le plan d'exécution réel via dbms_xplan.display_cursor
    • activez la trace SQL dans la procédure PL/SQL via dbms_session.session_trace_enable pour récuperer dans le fichier trace le même plan
    • comparez les deux


    Il serait sage peut-être de chauffer la base en exécutant la requête avant de commencer ces tests. Ou bien peut-être pas.

Discussions similaires

  1. Requête dans une requête sur une même colonne
    Par safraga dans le forum Développement
    Réponses: 2
    Dernier message: 02/10/2015, 10h07
  2. Ajouter une colonne dans une table via une requête
    Par Alien_psy dans le forum Requêtes et SQL.
    Réponses: 25
    Dernier message: 23/02/2013, 05h24
  3. Réutiliser des données d'une requête dans une requête
    Par mims1664 dans le forum Requêtes
    Réponses: 12
    Dernier message: 06/02/2009, 14h12
  4. Réponses: 2
    Dernier message: 02/06/2006, 11h26
  5. Réponses: 4
    Dernier message: 01/12/2005, 14h36

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