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 :

Statistiques sur les tables


Sujet :

Administration Oracle

  1. #1
    Membre averti
    Inscrit en
    Juillet 2007
    Messages
    44
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 44
    Par défaut Statistiques sur les tables
    Bonjour,

    J'aurais une question sur les stats.
    Savez-vous si les stats doivent être mises sur toutes les tables ou que sur celles qui ne bouge pas énormément?
    Si je mets les stats sur une table qui souffre souvent des modifications, est-ce que les performances sont affectées négatif?

    Merci à vous,

  2. #2
    Membre Expert
    Avatar de LeoAnderson
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    2 938
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 2 938
    Par défaut
    toutes, mais la fréquence de calcul peut-être variable

    en 8i/9i, le liste_stale est utile
    En 10g, le job fait ça pas trop mal

  3. #3
    Membre expérimenté
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    207
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 207
    Par défaut
    Il n'y pas vraiment de formule magique. Mais cela dépend effectivement si les tables sont plutot hautement transactionnel ou plutot table fixe.
    Par ailleurs, cela dépend de la volumétrie. Si cela prends 10 minutes d'analyzer les tables & index alors autant le faire quotidiennement.

    Attention: Pour les stats, il faut penser à générer les histogrammes, cela peut améliorer les performances

  4. #4
    Membre émérite Avatar de 13thFloor
    Homme Profil pro
    DBA Oracle freelance
    Inscrit en
    Janvier 2005
    Messages
    670
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : France

    Informations professionnelles :
    Activité : DBA Oracle freelance

    Informations forums :
    Inscription : Janvier 2005
    Messages : 670
    Par défaut
    Mais pourquoi donc recalculer systématiquement les statistiques ?
    Si les plans d'exécution sont ok et les temps de réponse corrects, inutile de recalculer les stats au risque de fausser les plan d'exec.
    Dés qu'une requête est tunée aux petits oignons, plus la peine de "dbms_stater".
    Zêtes pas d'accord ?

  5. #5
    Membre émérite Avatar de 13thFloor
    Homme Profil pro
    DBA Oracle freelance
    Inscrit en
    Janvier 2005
    Messages
    670
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : France

    Informations professionnelles :
    Activité : DBA Oracle freelance

    Informations forums :
    Inscription : Janvier 2005
    Messages : 670
    Par défaut
    Citation Envoyé par dnboa Voir le message
    Si je mets les stats sur une table qui souffre souvent des modifications, est-ce que les performances sont affectées négatif?
    Dans ce cas, j'essaiera de déterminer les bonnes valeurs à fournir à l'optimiseur (au travers de plusieurs tests) pour, au final, ne pas calculer les stats sur cette table mais les mettre à jour avec dbms_stats.set_table_stats une fois quand la table est à volume de croisière, une autre fois quand il y a changement important de volumétrie (en terme de blocs).
    Ex : utilisation courante, plan d'exec ok pour numblks=100 000, purge de 90% de la table, tu passes un set_table_stats avec numblks=10 pour forcer un full.
    Il faut en fait trouver les bonnes valeurs qui garantissent de bons plans d'exécution en toute circonstance (si c'est possible of course).

  6. #6
    Membre expérimenté
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    207
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 207
    Par défaut
    Si on se positionne dans le tuning à un instant t, effectivement si le plan est ok et les temps de réponse ok alors pas besoin.
    Mais en général dans la vraie vie, les données liées aux applications.
    Dans les banques ou assurances ce sont plusieurs millions de transactions / jours. Donc mieux d'avoir des stats à jours.
    Maintenant si il s'agit d'une table avec la liste des pays du monde, une fois que c'est fait, ca doit pas trop bouger (et ce même avec quelques déclaration d'indépendances.)

  7. #7
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par 13thFloor Voir le message
    Mais pourquoi donc recalculer systématiquement les statistiques ?
    Si les plans d'exécution sont ok et les temps de réponse corrects, inutile de recalculer les stats au risque de fausser les plan d'exec.
    Dés qu'une requête est tunée aux petits oignons, plus la peine de "dbms_stater".
    Zêtes pas d'accord ?
    ben non, pas d'accord.
    si tu as des tables qui bougent beaucoup, à coup de millions d'enregistrements par jours mettons, le plan d'exécution peut se trouver modifier à juste titre pour optimiser la requête.

  8. #8
    Membre émérite Avatar de 13thFloor
    Homme Profil pro
    DBA Oracle freelance
    Inscrit en
    Janvier 2005
    Messages
    670
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : France

    Informations professionnelles :
    Activité : DBA Oracle freelance

    Informations forums :
    Inscription : Janvier 2005
    Messages : 670
    Par défaut
    Citation Envoyé par Jerome_Mtl Voir le message
    ben non, pas d'accord.
    si tu as des tables qui bougent beaucoup, à coup de millions d'enregistrements par jours mettons, le plan d'exécution peut se trouver modifier à juste titre pour optimiser la requête.
    Si le plan d'exec se trouve amélioré rien qu'avec de nouvelles stats, c'est que le dba n'a pas fait du bon boulot. Faut pas attendre qu'un recalcul améliore les perfs (à mon avis).

    Néanmoins ce que tu dis est vrai si le dba ne fait rien et qu'une requête se met à faire du hash join au lieu de nested loops dés que le volume est important.

    Sur des tables SAP de plusieurs dizaines de millions de lignes, quelques millions de plus par jour ne change rien, les accès se font toujours par index (un peu forcé par le paramètrage je te l'accorde). Le plan est optimum quelque soit le volume supplémentaire car peu de données sont accédées.

  9. #9
    Invité de passage
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    1
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 1
    Par défaut
    Citation Envoyé par 13thFloor Voir le message
    Si le plan d'exec se trouve amélioré rien qu'avec de nouvelles stats, c'est que le dba n'a pas fait du bon boulot. Faut pas attendre qu'un recalcul améliore les perfs (à mon avis).
    Ha? Personnellement je trouve normal qu'un DBA recalcule regulierement les stats des objects de sa base. Si les recalculer ne sert a rien, il faut peut etre inform Oracle qu'ils stoppent le dev de ce feature.

    Citation Envoyé par 13thFloor Voir le message
    Néanmoins ce que tu dis est vrai si le dba ne fait rien et qu'une requête se met à faire du hash join au lieu de nested loops dés que le volume est important.

    Sur des tables SAP de plusieurs dizaines de millions de lignes, quelques millions de plus par jour ne change rien, les accès se font toujours par index (un peu forcé par le paramètrage je te l'accorde). Le plan est optimum quelque soit le volume supplémentaire car peu de données sont accédées.
    Yes, mais tu dis just que 1Million/day est au pire 10% du total nombre de tes lignes dans tes tables et dans ce cas si tu fais un "estimate" sur 20% de ta table ca ne change rien bien sur!

    Dans l'autre main, si ta table contient des millions de lignes et avec beaucoup de % de insertion/suppression (I mean there's a great difference between the lowest number of rows and the highest one), regenerer les stats me semble plutot un bonne idee

    Bien sur, il n'existe pas de solution absolu, tout les base de donnees sont differentes et il depend de l'utilisation de la base. Le bon DBA est celui qui connait bien sa base et comment elle est utilise.
    Il y a, pour sur, une phase d'experiment et il n'y a pas d'outil ou de solution a exclude, seul l'experience apres les phases d'observation peut dire quel est le meilleur moyen de garder des performance correct dans la majorite des cas.

Discussions similaires

  1. Réponses: 3
    Dernier message: 28/05/2009, 13h50
  2. [MySQL] Statistiques sur les données d'une table
    Par jeanmi68 dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 02/07/2008, 11h59
  3. Comment vérifier les statistiques sur les table d'un schéma
    Par juin29 dans le forum Administration
    Réponses: 1
    Dernier message: 17/06/2008, 17h55
  4. [MYSQL] Commentaires sur les tables et les champs
    Par luc2verga dans le forum Requêtes
    Réponses: 10
    Dernier message: 30/05/2007, 00h49
  5. verrous sur les tables
    Par rv66 dans le forum Paradox
    Réponses: 2
    Dernier message: 04/09/2005, 21h15

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