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 :

traquer des requêtes non bindées


Sujet :

Oracle

  1. #1
    Membre chevronné

    Profil pro
    Inscrit en
    Juin 2004
    Messages
    487
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 487
    Par défaut traquer des requêtes non bindées
    Bonjour à tous,

    Les applis qui tourn&ient dans ma base n'étaient pas bindées. J'ai demandé au développeurs de le faire ( en tout cas pour toutes les requêtes qui se font très souvent).
    cela a grandement augmenté mon taux de soft parse. Mais je peux voir qu'il doit rester encore au moins une ou deux requêtes non bindées.
    Connaissez-vous un moyen qui me permette de trouver laquelle sachant évidement que je ne sais pas quelle application est responsable et donc que je ne vais pas tracer une session?

  2. #2
    Rédacteur

    Inscrit en
    Septembre 2004
    Messages
    626
    Détails du profil
    Informations forums :
    Inscription : Septembre 2004
    Messages : 626
    Par défaut
    Bonjour Aline,


    Je crois que j'ai trouvé qqchose qui pourra t'intéresser :
    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
     
    create table t1 as select sql_text from v$sqlarea;
     
    alter table t1 add sql_text_wo_constants varchar2(1000);
     
    create or replace function 
    remove_constants( p_query in varchar2 ) return varchar2
    as
        l_query long;
        l_char  varchar2(1);
        l_in_quotes boolean default FALSE;
    begin
        for i in 1 .. length( p_query )
        loop
            l_char := substr(p_query,i,1);
            if ( l_char = '''' and l_in_quotes )
            then
                l_in_quotes := FALSE;
            elsif ( l_char = '''' and NOT l_in_quotes )
            then
                l_in_quotes := TRUE;
                l_query := l_query || '''#';
            end if;
            if ( NOT l_in_quotes ) then
                l_query := l_query || l_char;
            end if;
        end loop;
        l_query := translate( l_query, '0123456789', '@@@@@@@@@@' );
        for i in 0 .. 8 loop
            l_query := replace( l_query, lpad('@',10-i,'@'), '@' );
            l_query := replace( l_query, lpad(' ',10-i,' '), ' ' );
        end loop;
        return upper(l_query);
    end;
    /
    update t1 set sql_text_wo_constants = remove_constants(sql_text);
     
    select sql_text_wo_constants, count(*)
      from t1
     group by sql_text_wo_constants
    having count(*) > 100
     order by 2
    /
    (Cf. http://asktom.oracle.com/pls/ask/f?p...:1163635055580)

    Ca enlève toutes les constantes des requêtes et les compare ensuite...


    Laly.
    In the heart of the truly greats, perfection is never achieved but endlessly pursued.

    Mon article sur les fonctions analytiques d'Oracle (calcul de moyennes mobiles, de quartiles et bien d'autres...)

  3. #3
    Rédacteur

    Inscrit en
    Septembre 2004
    Messages
    626
    Détails du profil
    Informations forums :
    Inscription : Septembre 2004
    Messages : 626
    Par défaut
    Cependant il faut faire attention : si en environnement transactionnel, il est recommandé d'utiliser des binds variables, ce n'est pas forcémment souhaitable en environnement décisionnel.


    Laly.
    In the heart of the truly greats, perfection is never achieved but endlessly pursued.

    Mon article sur les fonctions analytiques d'Oracle (calcul de moyennes mobiles, de quartiles et bien d'autres...)

  4. #4
    Membre chevronné

    Profil pro
    Inscrit en
    Juin 2004
    Messages
    487
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 487
    Par défaut
    Citation Envoyé par lalystar
    Bonjour Aline,


    Je crois que j'ai trouvé qqchose qui pourra t'intéresser :



    Laly.
    Bonjour Laly,

    Désolée de te contredire, tu n'as pas trouvé quelque chos qui pourrait m'interesser, tu as trouvé exactement ce que je cherchais.

    Citation Envoyé par lalystar
    Cependant il faut faire attention : si en environnement transactionnel, il est recommandé d'utiliser des binds variables, ce n'est pas forcémment souhaitable en environnement décisionnel.
    Evidement, mais je te rassure, nous sommes en environnement hautement transactionnel.

    D'ou la chasse au bind

    et merci à toi evidement

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 17/10/2013, 15h01
  2. Requête non bindée
    Par alexisongagna dans le forum Administration
    Réponses: 2
    Dernier message: 05/01/2012, 14h42
  3. Exécution des requêtes non demandée
    Par lassaadpfe dans le forum Autres
    Réponses: 2
    Dernier message: 07/10/2011, 01h40
  4. [AC-2007] requête pour trier et afficher des champs non vides
    Par girard.hubert dans le forum Requêtes et SQL.
    Réponses: 3
    Dernier message: 25/01/2010, 20h08
  5. Réponses: 2
    Dernier message: 04/05/2007, 10h55

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