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 :

Cost et DB_FILE_MULTIBLOCK_READ_COUNT


Sujet :

Administration Oracle

  1. #1
    Membre éprouvé Avatar de totoche
    Inscrit en
    Janvier 2004
    Messages
    1 090
    Détails du profil
    Informations forums :
    Inscription : Janvier 2004
    Messages : 1 090
    Par défaut Cost et DB_FILE_MULTIBLOCK_READ_COUNT
    Bonjour,
    Est-ce un 'mauvais parmetrage ' du DB_FILE_MULTIBLOCK_READ_COUNT peut entrainer un full acess sur une attribut indexé mais à faible sélectivité (peu de cardinalité)?
    Merci de vos réponses

  2. #2
    Expert confirmé Avatar de mnitu
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2007
    Messages
    5 611
    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 611

  3. #3
    Membre éprouvé Avatar de totoche
    Inscrit en
    Janvier 2004
    Messages
    1 090
    Détails du profil
    Informations forums :
    Inscription : Janvier 2004
    Messages : 1 090
    Par défaut
    Si un attribut possede 10 cardinalités, mais qu'un seul attribut retourne 70% des lignes de la table.
    Que le db_file_multiblock_read_count est calé sur la taille du cache OS.

    Sachant que le temps lecture en mode multiblocs intervient dans le calcul du cout, il peut-y avoir un risque que l'optimiseur fasse un full table scan, même si la requete dans son prédicat porte sur l'attribut à faible sélectivité (70%)

    Seule la lecture du plan d'execution, indiquera s'il faut faire un hint pour forcer l'usage de l'index, au détriment des cardinalités a forte séléctivité.

    Face a ce constat, ne vaut-il mieux ne pas faire de hint afin de bénéficier de la lecture multibmock pour les cardinalité a forte sélectivité, et joindre une vue materializée pour l'attribut a faible sélectivité ?


    Merci de vos suggestions

  4. #4
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 454
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Sr. Specialist Solutions Architect @Databricks
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 454
    Par défaut
    Je ne suis pas sûr d'avoir compris l'intégralité de votre discours, mais si une requête doit retourner 70% des lignes de la table, un full scan sera nettement plus rapide qu'un index scan + table scan by rowid.

  5. #5
    Expert confirmé Avatar de mnitu
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2007
    Messages
    5 611
    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 611
    Par défaut
    Citation Envoyé par totoche Voir le message
    ...
    Seule la lecture du plan d'execution, indiquera s'il faut faire un hint pour forcer l'usage de l'index, au détriment des cardinalités a forte séléctivité.

    Face a ce constat, ne vaut-il mieux ne pas faire de hint afin de bénéficier de la lecture multibmock pour les cardinalité a forte sélectivité, et joindre une vue materializée pour l'attribut a faible sélectivité ?

    ...
    Rules for Hinting

    Mais, vos propos sont un peu confuses.

  6. #6
    Membre éprouvé Avatar de totoche
    Inscrit en
    Janvier 2004
    Messages
    1 090
    Détails du profil
    Informations forums :
    Inscription : Janvier 2004
    Messages : 1 090
    Par défaut
    Pardon, je ne me suis pas relu, et j'ai fais une inversion

    Sachant que le temps lecture en mode multiblocs intervient dans le calcul du cout, il peut-y avoir un risque que l'optimiseur fasse un full table scan, alors que la requete porte sur une cardinalité a forte sélectivité (peu de lignes retournés)

    Face a ce constat, ne vaut-il mieux une vue materializée pour l'attribut a faible sélectivité ?

  7. #7
    Expert confirmé
    Profil pro
    Inscrit en
    Août 2008
    Messages
    2 955
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 2 955
    Par défaut
    Citation Envoyé par totoche Voir le message
    alors que la requete porte sur une cardinalité a forte sélectivité (peu de lignes retournés)

    Face a ce constat, ne vaut-il mieux une vue materializée pour l'attribut a faible sélectivité ?
    Il y a les histogrammes pour aider l'optimiseur, mais le phénomène de bind variable peeking (cf l'article de mnitu) impacte fortement l'intérêt des histogrammes.

    Plutôt qu'une vue materialisée tu peux peut être tester la valeur pour la renseigner en dur et pour le reste utiliser les binds variables, du style :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    if (p_var1 == 1) then 
      select * from t where c = 1 and c2 = p_var2;
    else 
      select * from t where c = p_var1 and c2 = p_var2;
    end;
    Ou peut être juste ne pas bind la variable si tu es dans un contexte type DW.

  8. #8
    Expert confirmé Avatar de mnitu
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2007
    Messages
    5 611
    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 611
    Par défaut
    Les choses changent constamment avec les versions d’Oracle et donc, les solutions peuvent être totalement différentes en fonction de la version.

    A partir de la version 11g Oracle à introduit le mécanisme de « bind variable peeking aware » c’est-à-dire Oracle va surveiller les requêtes q’ utilisent des variables de liaison, il s’apercevra quand ces requêtes partirons dans les choux à cause des distributions de données non uniforme et il réévaluera les plan d’exécution.

    Je suis bien d’accord qu’il existe une classe de problèmes qui pourrait être résolues avec des vue matérialisées mais, je reste assez dubitatif quand à leur utilité dans ces cas.

    [Edit]
    Je trouve votre formulation
    requete porte sur une cardinalité a forte sélectivité (peu de lignes retournés
    un peu confuse. Regardez aussi les définitions dans la doc d'Oracle.
    [/Edit]

  9. #9
    Membre expérimenté Avatar de Ahmed AANGOUR
    Homme Profil pro
    DBA Oracle
    Inscrit en
    Janvier 2010
    Messages
    139
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France

    Informations professionnelles :
    Activité : DBA Oracle

    Informations forums :
    Inscription : Janvier 2010
    Messages : 139
    Par défaut
    Juste quelques remarques sur le sujet:
    - le paramètre db_file_multiblock_read_count est pris en compte lors du cost IO lorsque les workload system statistics ne sont pas calculés.
    - Lorsque les workload system statistics sont disponibles, le paramètres db_file_multiblock_read_count n'est plus utilisé. c'est remplacé par le MBRC.

    Donc la valeur donnée à ce paramètre a un impact directe sur le coût des lectures multiblocks uniquement lorsque les stats system ne sont pas disponibles.

    De plus la valeur de ce paramètre est limité aux capacités de l'OS.

    Il y'a une fonctionnalité à partir de la 10g r2 qui permet de laisser le soin à oracle de configurer la valeur de ce paramètre. il suffit pour cela de ne rien mettre dans ce paramètre.

  10. #10
    Membre éprouvé Avatar de totoche
    Inscrit en
    Janvier 2004
    Messages
    1 090
    Détails du profil
    Informations forums :
    Inscription : Janvier 2004
    Messages : 1 090
    Par défaut
    Ok merci,
    donc dans le cas ou les stats sont calculées, et l'optimiseur en mode choose(par ex), on a tout intérêt a calibrer le DB_FILE_MULTIBLOCK_READ_COUNT sur la capacité de l'OS non ?

  11. #11
    Membre expérimenté Avatar de Ahmed AANGOUR
    Homme Profil pro
    DBA Oracle
    Inscrit en
    Janvier 2010
    Messages
    139
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France

    Informations professionnelles :
    Activité : DBA Oracle

    Informations forums :
    Inscription : Janvier 2010
    Messages : 139
    Par défaut
    C'est l'inverse, si les stats systemes workload sont calculés, le paramètre n'est pas pris en compte par le CBO.

  12. #12
    Membre éprouvé Avatar de totoche
    Inscrit en
    Janvier 2004
    Messages
    1 090
    Détails du profil
    Informations forums :
    Inscription : Janvier 2004
    Messages : 1 090
    Par défaut
    Ok et merci Ahmed,
    je suis en 8.1.6 :

    J'ai les stats qui sont jouées, les requêtes se fondent la plupart de temps sur l'indexation INDEX RANGE SCAN, cependant je souhaite optimiser les TABLE ACCESS FULL que parfois les requêtes intègrent.
    C'est pourquoi je souhaité jouer sur le paramètre db_file_multiblock_read_count..

    Ahmed AANGOUR
    le paramètres db_file_multiblock_read_count n'est plus utilisé. c'est remplacé par le MBRC.
    Je n'ai pas trouvé trace de 'littérature' indiquant qu'en présence de stats le db_file_multiblock_read_count n'est plus utilisé.
    Si tu peux m'indiquer un lien, merci

    http://www.tafora.fr/wp/db_file_mult...count.doc.html

  13. #13
    Membre expérimenté Avatar de Ahmed AANGOUR
    Homme Profil pro
    DBA Oracle
    Inscrit en
    Janvier 2010
    Messages
    139
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France

    Informations professionnelles :
    Activité : DBA Oracle

    Informations forums :
    Inscription : Janvier 2010
    Messages : 139
    Par défaut
    Si t'es en 8i, oublie ce que je t'ai dit sur les stats systemes. il n' y'en a pas en 8i.

    Si t'as des stats objets à jour et que des fois dans les plans t'as des Full scan, cela ne veut pas dire que le Full Scan est mauvais en soit. Au contraire, quand tu récupères un gros pourcentage de ta table, le full scan est plus performant qu'un accès via un index.

    Si t'as des doutes sur certaines requêtes tu peux nous les envoyer avec le plan associé.

  14. #14
    Membre éprouvé Avatar de totoche
    Inscrit en
    Janvier 2004
    Messages
    1 090
    Détails du profil
    Informations forums :
    Inscription : Janvier 2004
    Messages : 1 090
    Par défaut
    Ok, merci,
    tu ne vois aucun inconvénient a ce que je calque mon DB_FILE_MULTIBLOCK_READ_COUNT sur la capacité de l'OS ?

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

Discussions similaires

  1. Votre avis sur mon site de low cost
    Par MrTimudjin dans le forum Mon site
    Réponses: 2
    Dernier message: 27/11/2008, 14h57
  2. Hébergement low cost USA / Asie
    Par manu_71 dans le forum Hébergement
    Réponses: 0
    Dernier message: 07/06/2008, 00h55
  3. Valeur de Cost dans plan_table
    Par comment_ca dans le forum Administration
    Réponses: 4
    Dernier message: 21/05/2007, 20h51
  4. Environnement de programmation .Net 2.0 'low cost'
    Par kraoc dans le forum Contribuez
    Réponses: 29
    Dernier message: 22/08/2006, 16h28

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