Bonjour,
Je cherche désespérement à comprendre à quoi sert la commande analyse.
J'étudie un script contenant
ANALYSE TABLE <ma_table> COMPUTE STATISTICS;
A quoi cela sert-il ?
Merci de votre aide
Nico
Bonjour,
Je cherche désespérement à comprendre à quoi sert la commande analyse.
J'étudie un script contenant
ANALYSE TABLE <ma_table> COMPUTE STATISTICS;
A quoi cela sert-il ?
Merci de votre aide
Nico
Pour répondre de façon très schématique...
Cela sert à calculer des statistiques sur une table.
Pour quoi faire ? De façon à ce que l'optimiseur de requetes d'Oracle puisse travailler correctement et choisir les bons index (ou pas) pour accéder aux données.
Voilà c'était la réponse simple...
Tu peux faire des recherches sur le forum aussi (et t'interesser à DBMS_STATS par la même occasion)
Par exemple ce tutoriel devrait t'interesser
Ok merci, ça m'aide déjà pas mal
Cependant, quelques questions subsistent....
Lorsque tu analyses une table, le résultat est stocké où ? en mémoire ?
Lors de la manipulation de la table analysée, le système crée un index lui-même ?
Merci
Sur le disque dur en faitEnvoyé par nicocolt
Non, il n'y a pas de création d'index mais des statistiques sont calculées sur la probabilité de rencontrer telle ou telle valeur, le nombre de lignes ainsi que la taille de la table sont remis à jour,...Lors de la manipulation de la table analysée, le système crée un index lui-même ?
Ok impecc
En fait les stats améliorent la performance du moteur oracle ?
Voilà c'est exactement çà...Envoyé par nicocolt
Il y a des nuances selon la version que tu utilises ou les réglages que tu as fait mais sinon c'est l'idée...
plus exactement dans le dictionnaire (table systéme Oracle), les colonnes LAST_ANALYZED et NUM_ROWS de dba_tables sont renseignées par l'ANALYSE notamentEnvoyé par dyvim
il me semble que depuis quelques temps, Oracle recommande d'utiliser le package dbms_stats à la place d'analyze, non?
Je confirme...Envoyé par gregory.broissard
De plus il y a d'avantage de possibiltés avec ce package (mais ce n'est pas pour rien que je l'avais cité dans ma première réponse )
Et même pour la 10g ils sont allés plus loin puisque la collecte de statistiques est automatisée par défaut. Il faut juste la configurer pour ne pas "plomber" certaines perfs si vous travaillez la nuit par exemple.
Peux tu préciser ce que tu veux dire par la collecte est automatisé en 10g. Je connais l'option de DBMS_STATS qui ne recalcule que les stats des tables qui ont evolué et donc qui en ont besoin. Mais j'ai toujours besoin de lancer DBMS_STATS périodiquement.
Y a une autre solution ?
Ben en 10g il faut que le GATHER_STATS_JOB soit ENABLED déjà...
Et là normalement une collecte des stats automatiques est faite.
Code : Sélectionner tout - Visualiser dans une fenêtre à part DBMS_SCHEDULER.ENABLE('GATHER_STATS_JOB');
Il faut ensuite vérifier/modifier sa programmation avec DBMS_SCHEDULER ou Oracle Enterprise Manager...
Je ne peux malheureusement pas t'en dire bcp plus puique je travaille en 9i et que je ne suis pas DBA.
Code : Sélectionner tout - Visualiser dans une fenêtre à part DBMS_SCHEDULER.SET_ATTRIBUTE('...')
Oracle crée depuis la 10G et dans une optique d'automatisation un job grace au schéduler et qui va permettre de collecter automatiquement les stats à un intervalle de temps donnée. Il se base bel et bien sur le package DBMS_STATS.
Cependant je vous conseille de supprimer cette planification et de gérer vous même vos collectes de stats
Mais pourquoi ?Envoyé par Jaouad
Aurais tu des motifs d'insatisfaction de cette plannification?
car c'est un job schédulé sans tenir compte de la spécificité de chaque BDD. IL vaut mieux le customiser en fonction de ces instances
il faut bien sûr employer l'americanisme ANALYZEEnvoyé par nicocolt
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager