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

Administration Oracle Discussion :

[Oracle 8i][Internet] Shared Pool Size


Sujet :

Administration Oracle

  1. #21
    Membre régulier Avatar de dupin40
    Profil pro
    Inscrit en
    Août 2003
    Messages
    102
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2003
    Messages : 102
    Points : 100
    Points
    100
    Par défaut
    je viens de retirer le tag RESOLU


    Je vais passer pour un débutant, mais que sont les binds variables ?
    Deuxième question : Le % ne fait qu'augmenter avec l'utilisation de la base,
    Y a t'il un moyen de libérer cette memoire allouée mais non utilisée ... une sorte de Garbage Collector pour ORACLE ? ou bien la seule solution est de redémarrer l'instance de la base.
    no frag, no life

  2. #22
    Expert éminent sénior
    Avatar de orafrance
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    15 967
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Points : 19 073
    Points
    19 073
    Par défaut
    les bind variables sont simplement des variables qui remplace des valeurs en dur.

    Exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    DECLARE
    dummy NUMBER;
    BEGIN
     
    SELECT 1 INTO dummy 
    FROM all_tables
    WHERE table_name = 'TOTO';
     
    END;
    /
    devient :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    DECLARE
    dummy NUMBER;
    tab_name VARCHAR2(30) := 'TOTO'
    BEGIN
     
    SELECT 1 INTO dummy 
    FROM all_tables
    WHERE table_name = tab_name;
     
    END;
    /
    ainsi Oracle reconnait la requête quelque soit la valeur de tab_name alors que dans le premier exemple, Oracle considère que si 'TOTO' devient 'TITI' la requête est différente.

  3. #23
    Membre confirmé
    Inscrit en
    Décembre 2003
    Messages
    493
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 493
    Points : 605
    Points
    605
    Par défaut
    1) vérifie que tu as bien le dernier patch installé pour ta version db (il y a des bugs aussi chez oracle --> vérifie via ton compte metalink)

    2) si pas de bug, ton problème vient de ton applic : elle doit être mal écrite ... tu dois effectivement utiliser des bind variable dans tes statements plutôt que des valeurs en dur

    te faire un cour sur les bind variable me semble difficille, je crois qu'il y a un article de sheik yerbouti à ce sujet sur ce forum

    le principe sous-jacent à ces bind variable est que lorsque tu exécutes un statement, oracle le cache en mémoire et à la prochaine exécution, il le réutilise ... SSI il est identique --> les bind variable permette de passer des valeurs différentes à un même sql

    l'exemple le pus concret d'une bind variable est une variable pl/sql

    ton problème de mémoire n'est pas forcément dû à une taille trop petite mais à un problème de fragmentation

    -> réécrire l'applic ... semble la bonne solution
    -> peut-être configurer le shared reserved pool mais là il faut relire la doc car je ne fais pas cela tous les jours (en gros, c'est une zone mémoire hors de la library cache où tu peux stocker certains objets et les rendre hors de porté du fameux algorithme LRU de la library cache)

    pour tenter de résoudre très temporairement ton pblm tu peux faire un flush du shared pool --> alter system flush shared pool

    mais le problème c'est ton applic , ou un bug ...

  4. #24
    Membre régulier Avatar de dupin40
    Profil pro
    Inscrit en
    Août 2003
    Messages
    102
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2003
    Messages : 102
    Points : 100
    Points
    100
    Par défaut
    j'ai bien compris ce que sont les binds variables ... cf ce lien
    enfin je crois
    - pour tout query envoyé au serveur, le gestionnaire regarde si en cache le query n'existe pas exactement au niveau des la synthaxe.
    - ok
    on va dire que dans la majorité des cas, lorsque je dois executer une requete je le fais de cette maniere .... synthaxe C# / ASPX

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    OracleConnection conn = new OracleConnection(...);
    OracleDataAdapter cmd = new OracleDataAdapter("select nom, prenom from employe where id = :monid", connexion);
    cmd.SelectCommand.Parameters.Add("monid", 12);
    ...
    conn.Dispose();
    Donc a priori j'utilise les variables liées "bind varaibles". non ?
    no frag, no life

  5. #25
    Expert éminent sénior
    Avatar de orafrance
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    15 967
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Points : 19 073
    Points
    19 073
    Par défaut
    probablement pas puisque C# doit remplacer la variable par sa valeur avant d'envoyer la requête à Oracle

  6. #26
    Membre régulier Avatar de dupin40
    Profil pro
    Inscrit en
    Août 2003
    Messages
    102
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2003
    Messages : 102
    Points : 100
    Points
    100
    Par défaut
    Citation Envoyé par orafrance
    probablement pas puisque C# doit remplacer la variable par sa valeur avant d'envoyer la requête à Oracle
    il va falloir quand meme vérifier !! c'est pas possible !!
    no frag, no life

  7. #27
    Membre confirmé
    Inscrit en
    Décembre 2003
    Messages
    493
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 493
    Points : 605
    Points
    605
    Par défaut
    ben oui ...

    utilise odp.net

  8. #28
    Membre régulier Avatar de dupin40
    Profil pro
    Inscrit en
    Août 2003
    Messages
    102
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2003
    Messages : 102
    Points : 100
    Points
    100
    Par défaut
    Citation Envoyé par Marc Musette
    ben oui ...

    utilise odp.net
    Oups, j'utilise ceux de "Microsoft .NET Framework 1.1 Data Provider for Oracle" intégré à Visual Studio 2003

    Il y a une différence importante entre ces deux Providers ?
    car odp.net n'est dispo que pour Oracle9i et au dessus reference MSDN
    no frag, no life

  9. #29
    Rédacteur

    Inscrit en
    Septembre 2004
    Messages
    626
    Détails du profil
    Informations forums :
    Inscription : Septembre 2004
    Messages : 626
    Points : 848
    Points
    848
    Par défaut
    dupin40,


    vu le bout de code que tu fournis je pense que tu utilises les bind variables.

    Pour en être sûr, tu peux faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    -- vide le contenu du shared pool
    alter system flush shared_pool;
    Puis lance par ton code, deux requêtes différent seulement par une constante.

    Et ensuite regarde dans V$SQL tu as combien de requêtes.


    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...)

  10. #30
    Expert éminent sénior
    Avatar de orafrance
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    15 967
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Points : 19 073
    Points
    19 073
    Par défaut
    laly je ne pense pas... d'ailleur :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    execute immediate 'select owner from table_name where table_name = ' || ma_var;
    n'utilise pas les bind variables... attention donc

  11. #31
    Rédacteur

    Inscrit en
    Septembre 2004
    Messages
    626
    Détails du profil
    Informations forums :
    Inscription : Septembre 2004
    Messages : 626
    Points : 848
    Points
    848
    Par défaut
    Orafrance,


    Je suis entièrement d'accord avec toi : ton exemple n'utilise pas les bind variables mais sur le principe je pensais que le bout de code de dupin40 est équivalent à :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    execute immediate 'select owner from table_name where table_name = :1' using ma_var;
    Car les valeurs des paramètres sont fournies par le md.SelectCommand.Parameters.Add.

    j'ai un bout de code en VB au travail qui utilise les binds variables, je regarderais demain.


    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...)

  12. #32
    Expert éminent sénior
    Avatar de orafrance
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    15 967
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Points : 19 073
    Points
    19 073
    Par défaut
    oui peut-être... finalement j'en sais rien du tout, je ne connais absolument pas C#

  13. #33
    Rédacteur

    Inscrit en
    Septembre 2004
    Messages
    626
    Détails du profil
    Informations forums :
    Inscription : Septembre 2004
    Messages : 626
    Points : 848
    Points
    848
    Par défaut
    Oui en fait mon bout de code est différent sur le principe puisque je ne recrée pas les paramètres de l'objet commande :

    En visual basic, pour utiliser les bind variables :
    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
     
        Dim cmd As ADODB.Command
        Set cmd = New ADODB.Command
        With cmd
            .ActiveConnection = cnx
            .CommandText = "insert into W_CTE_CTI_MC_COVERAGE values(?, ?)"
     
            .CreateParameter "client_id", adInteger, adParamInput, 7
            .CreateParameter "i_intrn", adVarChar, adParamInput, 18
        End With
     
        While ...
                With cmd
                    .Parameters(0).Value = clientId
                    .Parameters(1).Value = rmpm
                    .Execute
                End With
        Wend

    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...)

  14. #34
    Membre régulier Avatar de dupin40
    Profil pro
    Inscrit en
    Août 2003
    Messages
    102
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2003
    Messages : 102
    Points : 100
    Points
    100
    Par défaut
    Plus de problème depuis que j'ai patché la base Oracle 8.1.7.0 -> 8.1.7.4
    avec le dernier patch pour oracle 8i.

    Maintenant je m'interesse au remplissage de cette fameuse Shared_Pool
    avec la commande je liste le contenu de celle ci et je trouve dans chose un peu bizarre mais je suis certain que nos redacteurs vont pouvoir m'aider

    Comment deux query identiques (même SQL_TEXT) peuvent se trouver deux fois dans la Shared_Pool.

    select distinct M2_C1,M2_C2,M2_C82,M2_C83,M2_C10 from M2 where M2_C3=0 and M2_C5='T' order by M2_C82 ASC
    select distinct M2_C1,M2_C2,M2_C82,M2_C83,M2_C10 from M2 where M2_C3=0 and M2_C5='T' order by M2_C82 ASC
    no frag, no life

  15. #35
    Expert éminent sénior
    Avatar de orafrance
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    15 967
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Points : 19 073
    Points
    19 073
    Par défaut
    tu peux vérifier si elles sont identiques à l'espace près... parce que si je ne me trompe pas :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select sysdate from dual;
    et

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    select sysdate
    from dual;
    sont différentes... je vais essayer de retrouver l'article qui parle de ça

  16. #36
    Rédacteur

    Inscrit en
    Septembre 2004
    Messages
    626
    Détails du profil
    Informations forums :
    Inscription : Septembre 2004
    Messages : 626
    Points : 848
    Points
    848
    Par défaut
    Quand tu regardes V$SQLAREA, tu as une colonne VERSION_COUNT qui contient le nb de versions existants pour une même requête.

    En effet, une même requête peut être traitée de manière différente quand l'environnement n'est pas le même (paramètres de session par exemple : SORT_AREA_SIZE, HASH_AREA_SIZE, OPTIMIZER_GOAL...)


    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...)

  17. #37
    Membre régulier Avatar de dupin40
    Profil pro
    Inscrit en
    Août 2003
    Messages
    102
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2003
    Messages : 102
    Points : 100
    Points
    100
    Par défaut
    Je suis quasiment certains que les deux queries sont identiques car j'ai copier coller le resultat de la requete
    depuis PL/SQL Developer ... A moins que PL/SQL Developper ou que je la vue ne reformatte les données ... Je vais approfondir en regardant dans mon code.
    Merci je poursuis mes recherches
    no frag, no life

  18. #38
    Membre régulier Avatar de dupin40
    Profil pro
    Inscrit en
    Août 2003
    Messages
    102
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2003
    Messages : 102
    Points : 100
    Points
    100
    Par défaut
    Citation Envoyé par lalystar
    Quand tu regardes V$SQLAREA, tu as une colonne VERSION_COUNT qui contient le nb de versions existants pour une même requête.

    En effet, une même requête peut être traitée de manière différente quand l'environnement n'est pas le même (paramètres de session par exemple : SORT_AREA_SIZE, HASH_AREA_SIZE, OPTIMIZER_GOAL...)


    Laly.
    Bien compris.
    Donc dans le code je vais bien faire attention à passer au maximum par les variables liées après si l'envirronement n'est pas le même "tant pis" le query s'y trouvera plusieurs fois.

    Je vous remercie à tous pour vos précieux conseils.
    J'aime bien monter en compétence par le biais des forums

    a+ pour des nouvelles questions.
    et encore bravo pour votre réactivité
    no frag, no life

  19. #39
    Expert éminent sénior
    Avatar de orafrance
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    15 967
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Points : 19 073
    Points
    19 073
    Par défaut
    Enfin, ça sert à rien non plus de se focaliser trop là dessus hein

  20. #40
    Membre régulier Avatar de dupin40
    Profil pro
    Inscrit en
    Août 2003
    Messages
    102
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2003
    Messages : 102
    Points : 100
    Points
    100
    Par défaut
    C'est bien pour ca que j'ai mis le TAG résolu
    Je voulais juste me documenter sur ce qu'était le Shared_Pool , je partais de très très bas
    Mais c'est clair tout ca c'est de l'optimisation assez poussé du code pour peu etre pas grand chose.
    no frag, no life

+ Répondre à la discussion
Cette discussion est résolue.
Page 2 sur 2 PremièrePremière 12

Discussions similaires

  1. Problème shared pool size
    Par Snipah dans le forum Administration
    Réponses: 2
    Dernier message: 07/04/2009, 12h12
  2. shared pool memory
    Par yan dans le forum C
    Réponses: 2
    Dernier message: 07/02/2008, 10h38
  3. ORA 04031 PB Large pool size
    Par sb1960 dans le forum Administration
    Réponses: 4
    Dernier message: 29/01/2008, 14h33
  4. Requete dans shared pool
    Par guyrnaf dans le forum Administration
    Réponses: 1
    Dernier message: 01/11/2007, 16h19
  5. [ORA-00371] Not enough shared pool memory !!!
    Par max44410 dans le forum Installation
    Réponses: 6
    Dernier message: 30/11/2005, 19h47

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