Perf objects without statistics
Aller à la navigation
Aller à la recherche
| Fiche express | |
|---|---|
| Type | Script SQL*Plus de diagnostic |
| Domaine | Performance |
| Voir aussi | Perf top 10 tables |
Perf objects without statistics liste toutes les tables, index et partitions (de tables ou d'index) qui n'ont jamais eu de statistiques collectées (last_analyzed IS NULL), en excluant les schémas système SYS et SYSTEM. Des statistiques absentes ou périmées faussent les estimations du Cost-Based Optimizer et peuvent conduire à des plans d'exécution très sous-optimaux.
Script
SET LINESIZE 145
SET PAGESIZE 9999
SET VERIFY OFF
COLUMN owner FORMAT a17 HEAD 'Owner'
COLUMN object_type FORMAT a15 HEAD 'Object Type'
COLUMN object_name FORMAT a30 HEAD 'Object Name'
COLUMN partition_name FORMAT a30 HEAD 'Partition Name'
SELECT owner, 'Table' object_type, table_name object_name, NULL partition_name
FROM sys.dba_tables
WHERE last_analyzed IS NULL
AND owner NOT IN ('SYS', 'SYSTEM')
AND partitioned = 'NO'
UNION
SELECT owner, 'Index' object_type, index_name object_name, NULL partition_name
FROM sys.dba_indexes
WHERE last_analyzed IS NULL
AND owner NOT IN ('SYS', 'SYSTEM')
AND partitioned = 'NO'
UNION
SELECT table_owner owner, 'Table Partition' object_type, table_name object_name, partition_name
FROM sys.dba_tab_partitions
WHERE last_analyzed IS NULL
AND table_owner NOT IN ('SYS', 'SYSTEM')
UNION
SELECT index_owner owner, 'Index Partition' object_type, index_name object_name, partition_name
FROM sys.dba_ind_partitions
WHERE last_analyzed IS NULL
AND index_owner NOT IN ('SYS', 'SYSTEM')
ORDER BY 1, 2, 3
/
Interprétation
- Sur une base récente avec le job automatique de collecte des statistiques actif (
GATHER_STATS_JOB/auto optimizer stats collection, activé par défaut depuis Oracle 10g), une liste vide ou courte est normale ; vérifier l'état du job viaDBA_AUTOTASK_CLIENTsi le résultat est inattendu. - Une liste longue et persistante malgré le job automatique peut signaler des tables créées puis chargées massivement en une seule transaction juste après la fenêtre de maintenance, ou un job désactivé (
DBMS_AUTO_TASK_ADMIN). - Pour un contrôle plus fin sur des bases modernes, préférer
DBA_TAB_STATISTICS.STALE_STATSqui détecte aussi les statistiques périmées (pas seulement absentes) en fonction du seuil de modification des lignes. - Traitement correctif standard :
DBMS_STATS.GATHER_SCHEMA_STATS(ouGATHER_TABLE_STATSobjet par objet) plutôt que l'ancienANALYZE.
Voir aussi
- Perf top 10 tables — identifie les tables les plus sollicitées, candidates naturelles à surveiller en priorité côté statistiques.