Trouver les statistiques obsolètes et définir des préférences de statistiques par table (prefs)
OracleStatistiquesCommande
-- 1) Flush DML counters to the dictionary and list stale objects:
EXEC DBMS_STATS.FLUSH_DATABASE_MONITORING_INFO;
SELECT owner, table_name, partition_name, num_rows,
TO_CHAR(last_analyzed,'YYYY-MM-DD HH24:MI') AS last_analyzed,
stale_stats, stattype_locked
FROM dba_tab_statistics
WHERE owner = 'CUSTOMER_APP'
AND (stale_stats = 'YES' OR last_analyzed IS NULL)
ORDER BY table_name, partition_name;
SELECT table_name, partition_name, inserts, updates, deletes, truncated
FROM dba_tab_modifications
WHERE table_owner = 'CUSTOMER_APP';
-- 2) Per-table preferences (used by the auto stats job and manual GATHER calls):
EXEC DBMS_STATS.SET_TABLE_PREFS('CUSTOMER_APP', 'SALES', 'STALE_PERCENT', '5');
EXEC DBMS_STATS.SET_TABLE_PREFS('CUSTOMER_APP', 'SALES', 'METHOD_OPT', 'FOR ALL COLUMNS SIZE AUTO FOR COLUMNS SIZE 254 CUSTOMER_ID');
EXEC DBMS_STATS.SET_TABLE_PREFS('CUSTOMER_APP', 'SALES', 'DEGREE', '4');
SELECT DBMS_STATS.GET_PREFS('STALE_PERCENT', 'CUSTOMER_APP', 'SALES') AS stale_pct FROM dual;
SELECT table_name, preference_name, preference_value
FROM dba_tab_stat_prefs WHERE owner = 'CUSTOMER_APP';
-- 3) Gather only stale objects:
EXEC DBMS_STATS.GATHER_SCHEMA_STATS(ownname => 'CUSTOMER_APP', options => 'GATHER STALE');
-- Revert a preference: EXEC DBMS_STATS.DELETE_TABLE_PREFS('CUSTOMER_APP', 'SALES', 'STALE_PERCENT');Ce que fait la commande
Les statistiques deviennent obsolètes lorsque le taux de modification dépasse STALE_PERCENT (10 % par défaut). Les préférences conservent par table l'échantillonnage, les histogrammes, le parallélisme et les seuils d'obsolescence, afin que la tâche automatique de statistiques nocturne applique les mêmes règles.
Quand l'utiliser
Lorsque le seuil de 10 % se déclenche trop tard sur les grandes tables, lorsque certaines colonnes doivent toujours avoir un histogramme, et pour définir la stratégie de collecte dans le dictionnaire plutôt que dans des scripts.
Attention
Aucune licence requise. Les préférences sont remplacées par les paramètres explicites d'un appel GATHER manuel. Modifier METHOD_OPT ajoute ou supprime des histogrammes et peut changer les plans. DBA_TAB_MODIFICATIONS n'est à jour qu'après un flush (flush automatique environ toutes les 15 minutes).