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

  1. #1
    Membre expérimenté
    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 chevronné
    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é
    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 chevronné
    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
    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.

###raw>template_hook.ano_emploi###