Des statistiques périmées sont l’une des causes les plus fréquentes d’un plan d’exécution qui se dégrade brutalement, par exemple après un gros chargement ou une purge. Voici les deux appels que nous utilisons le plus.

1. Collecter les statistiques d’une table

BEGIN
 DBMS_STATS.GATHER_TABLE_STATS (ownname => '<OWNER>' , tabname => '<TABLE_NAME>',
  cascade => true, estimate_percent => 15,method_opt=>'for all indexed columns size 1', granularity => 'ALL', degree => 1);
END;
  • cascade => true collecte aussi les statistiques des index de la table.
  • estimate_percent => 15 échantillonne 15 % des lignes.
  • granularity => 'ALL' couvre la table, ses partitions et sous-partitions.

2. Collecter les statistiques d’un schéma

exec dbms_stats.gather_schema_stats( -
    ownname          => '<SCHEMA_NAME>', -
    options          => 'GATHER AUTO', -
    estimate_percent => dbms_stats.auto_sample_size, -
    method_opt       => 'for all columns size repeat', -
    degree           => 15 -
)
  • options => 'GATHER AUTO' laisse Oracle choisir les objets qui en ont besoin (statistiques absentes ou périmées).
  • method_opt => 'for all columns size repeat' conserve les histogrammes existants.
  • degree => 15 parallélise la collecte — à ajuster selon les CPU disponibles.