Oracle – Détection des index déséquilibrés à reconstruire


1er temps, analyser l’index pour connaître sa structure :

analyze index <owner>.<index_name> validate structure;

2ème temps, afficher les statistiques de structure :

select name, height,lf_rows,lf_blks,del_lf_rows from index_stats;

Si la hauteur d’index est supérieure à 2, se poser la question de la réorganisation en fonction du nombre de lignes (leaf rows).
Par ailleurs, le rapport del_lf_rows / lf_rows doit être inférieur à 20 %. Si ce rapport dépasse 20 % (de fragmentation de l’index du fait des lignes effacées), alors réorganiser l’index :
alter index <owner>.<index_name> rebuild [online];
Un script peut permettre d’obtenir rapidement les statistiques de déséquilibre des index d’un schéma :
set linesize 200
set pagesize 0
set echo off
set head off
set trimspool on
ttitle off
btitle off
set verify off
set feedback off
spool <fichier.sql>
select
'analyze index ' || owner || '.' || index_name || ' validate structure;' || chr(10) ||
'select name, height,lf_rows,lf_blks,del_lf_rows from index_stats;'
from
dba_indexes where owner = '<owner>';
spool off
@@<fichier.sql>