Depuis Oracle 10, par défaut, les statistiques sont collectées automatiquement toutes les nuits, avec des options par défaut.
Et puisque vous êtes en V11, autant profiter des apports de cette version !
Pour connaître les paramètres généraux en vigueur, on a DBMS_STATS.GET_PREFS.
Le paramètre qui nous intéresse ici est METHOD_OPT.
1 2 3 4 5 6
| col METHODE format A40
select dbms_stats.get_prefs('METHOD_OPT') METHODE from dual;
METHODE
------------------------------
FOR ALL COLUMNS SIZE AUTO |
Donc il faut modifier cette valeur par défaut :
exec dbms_stats.set_global_prefs('METHOD_OPT', 'FOR ALL INDEXED COLUMNS SIZE AUTO');
Ensuite, on peut désormais définir des préférences individuelles pour des tables particulières.
1 2 3 4 5 6 7 8 9
| begin
dbms_stats.set_table_prefs(
ownname => 'SCOTT',
tabname => 'EMP',
pname => 'METHOD_OPT',
pvalue => 'FOR ALL COLUMNS SIZE 254'
);
end;
/ |
La dernière exigence (pas de recalcul pour les tables de moins de 15 lignes) est pour moi satisfaite par défaut, et il n'y a rien de particulier à faire.
En effet, depuis Oracle 10, les tables sont surveillées automatiquement (attribut MONITORING implicite), et leurs modifications sont tracées dans DBA_TAB_MODIFICATIONS. Cette vue est prise en compte lors du calcul des stats : si une table a subi moins de n % de modifications depuis le dernier calcul, elle est ignorée et on passe à la suivante.
Ainsi, on ne recalcule pas inutilement des stats sur une table qui n'aurait pas bougé, et ce indépendamment de son nombre de lignes.
Ce seuil de n % est défini automatiquement par défaut.
On peut le connaître table par table en consultant SAMPLE_SIZE (nombre de lignes lues pour calculer les stats) et NUM_ROWS (nombre de lignes estimées) dans DBA_TABLES.
Il est aussi paramétrable, globalement ou individuellement :
exec dbms_stats.set_global_prefs('ESTIMATE_PERCENT', 10);
Partager