Oracle

ID #1001

Génération des statistiques

Il est important de noter que la qualité des statistiques permet d'aider l'optimiseur Oracle à choisir le meilleur plan d'exécution pour un SQL. Les anciennes méthode d'analyse des statistiques (ANALYSE TABLE et DBMS_UTILITY) ne sont plus recommandées et peuvent même nuire aux performances. DBMS_STATS est le plus performant en ce sens, et en particulier pour les grandes tables (avec ou sans partitions).

Le lancement des statistiques via l’appel d’une procédure stockée standardisée est recommandée. Un pourcentage inférieur 20 % est amplement suffisant, c'est ce que propose Oracle avec sa valeur AUTO_SAMPLE_SIZE.

NB: Il faudra également faire attention pour que chaque chargement de table (petite ou grande) lance aussi ses statistiques.

Voici un exemple d'un appel type pour une procédure stockée de statistique:
Ex : PRC_LANCERSTATS (vSchema, vTable, vPartition (optionel))

Avec en contenu, les appels au package de DBMS _STATS :

PROCEDURE PRC_LANCERSTATS_TABLE (pOwnname VARCHAR2,
ptabname VARCHAR2,
pPartname VARCHAR2 DEFAULT NULL) IS
/*---------------------------------------------------------------------------
NOM DE PROCEDURE : PRC_LANCERSTATS_TABLE
DESCRIPTION : Procédure qui permet de lancer les stats sur une table ou une partition.
PARAMETRES : pOWNNAME : Nom du schéma
: pTABNAME : Nom de la table
: pPARTNAME : Nom de la partition (OPTIONEL)
CREATION : 2008-02-04 : Michel Preti, www.michelpreti.com
MODIFICATIONS : --
----------------------------------------------------------------------------*/
BEGIN

-- Enlever un lock possible sur les statistiques
SYS.DBMS_STATS.UNLOCK_TABLE_STATS(pOWNNAME, pTABNAME);

-- Effacer les statistiques
SYS.DBMS_STATS.DELETE_TABLE_STATS(pOWNNAME, pTABNAME);

-- Lancer les statistiques
SYS.DBMS_STATS.GATHER_TABLE_STATS (OWNNAME => pOWNNAME,
TABNAME => pTABNAME,
PARTNAME => pPARTNAME,
CASCADE => DBMS_STATS.AUTO_CASCADE,
ESTIMATE_PERCENT => DBMS_STATS.AUTO_SAMPLE_SIZE,
METHOD_OPT => 'FOR ALL COLUMNS SIZE SKEWONLY',
DEGREE => 8);

END PRC_LANCERSTATS_TABLE;

 

Quelques informations:
AUTO_CASCADE : Oracle détermine si les stats des indexes associés à la table doivent être aussi lancés.
AUTO_SAMPLE_SIZE : Oracle proposera 5 à 20 %, ce qui est amplement suffisant.
FOR ALL COLUMNS SIZE SKEWONLY : Fait un calcul des stats avec histogrammes.
DEGREE : Degrée de parallélisme = Nombre de CPU - 1

 

Tags: -

Related entries:

Dernière mise à jour: 2008-05-26 13:22
Auteur: Michel Preti
Révision: 1.4

Digg it! Imprimer cet article Envoyer à un ami version PDF
Propose a translation for Propose a translation for
Merci de noter cette entrée:

Moyenne des notes: 4.33 sur 5 (3 Votes)

complètement inutile 1 2 3 4 5 indispensable

Vous ne pouvez pas commenter cet enregistrement