DBAtlas · Atlas d'exploitation des bases de données

Trouver les statistiques obsolètes et définir des préférences de statistiques par table (prefs)

OracleStatistiques

Commande

-- 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).

Ouvrir dans DBAtlas →

Voir aussi