mardi 2 août 2011

STATISTIQUES : pending statistics 11g

Pending Statistics

Dans les versions d'Oracle antérieures à la 11g, les nouvelles statistiques de l'optimiseur étaient mises à disposition tout de suite. En 11g, c'est toujours le comportement par défaut, mais on a maintentant la possibilité de conserver les statistiques nouvellement générées dans un état d'attente jusqu'à ce que l'on choisisse de les publier.

Par défaut Les statistiques sont automatiquement publiées :
SQL> SELECT DBMS_STATS.get_prefs('PUBLISH') FROM dual;

DBMS_STATS.GET_PREFS('PUBLISH')
-------------------------------------------
TRUE
1 row selected.

Pour modifier le comportement par défaut, et ne pas publier automatiquement les futures mises à jour 
des statistiques de la table SCOTT.EMP :
EXEC DBMS_STATS.set_table_prefs('SCOTT','EMP','PUBLISH','false');

Pour publier automatiquement les futures mises à jour des statistiques de la table SCOTT.EMP :
EXEC DBMS_STATS.set_table_prefs('SCOTT','EMP','PUBLISH','true');

Vues listant les statistiques à publier :
SELECT * FROM [DBA|ALL|USER]_TAB_PENDING_STATS;
SELECT * FROM [DBA|ALL|USER]_IND_PENDING_STATS;

Pour publier toutes les statistiques en attente :
EXEC DBMS_STATS.publish_pending_stats(NULL, NULL);

Pour publier les statistiques en attente de l'objet SCOTT.EMP :
EXEC DBMS_STATS.publish_pending_stats('SCOTT','EMP');

Pour supprimer les statistiques en attente de l'objet SCOTT.EMP :
EXEC DBMS_STATS.delete_pending_stats('SCOTT','EMP');

L'optimiseur peut utiliser les statistiques en attente (pending) en positionnant le paramètre OPTIMIZER_USE_PENDING_STATISTICS à TRUE (FALSE par défaut), ce qui revient à supprimer la fonctionnalité de statistiques en atente.

Il est possible également de modifier le paramètre au niveau session, ce qui permet de tester le bénéfice des nouvelles statistiques dans une session avant de les publier.
ALTER SESSION SET OPTIMIZER_USE_PENDING_STATISTICS=TRUE;

Il est possible de transférer les statistiques en attente d'une base à une autre avec la procédure DBMS_STATS.EXPORT_PENDING_STATS

Aucun commentaire:

Enregistrer un commentaire