Undo contention

De wiki.nexiat.fr
Aller à la navigation Aller à la recherche
Fiche express
Type Script SQL*Plus de diagnostic (Undo)
Voir aussi Undo segments · Undo users

Undo contention calcule un taux d'attente (« wait ratio ») sur les en-têtes et les blocs des segments d'annulation (UNDO), rapporté à l'activité globale de lecture (db block gets + consistent gets). Un ratio anormalement élevé sur les classes undo header / undo block (ou leurs équivalents system undo header / system undo block) est le signe classique d'une contention sur l'UNDO tablespace : dimensionnement insuffisant, nombre de segments d'annulation trop faible pour la charge concurrente, ou UNDO_RETENTION mal calibré.

Le script interroge les vues GV$ et fonctionne aussi bien sur une instance unique qu'en RAC.

Script

-- Taux de contention sur les segments UNDO (RAC-compatible)
SET LINESIZE 180
SET PAGESIZE 50000
SET VERIFY OFF

COLUMN instance_name FORMAT a10 HEADING 'Instance'
COLUMN class         FORMAT a18 HEADING 'Class'
COLUMN ratio                    HEADING 'Wait Ratio'

BREAK ON instance_name SKIP 2

SELECT
    i.instance_name                       instance_name
  , w.class                               class
  , ROUND(100 * (w.count / SUM(s.value)), 8) ratio
FROM
    gv$instance i
  , gv$waitstat w
  , gv$sysstat  s
WHERE
      i.inst_id = w.inst_id
  AND i.inst_id = s.inst_id
  AND w.class IN ( 'system undo header'
                  , 'system undo block'
                  , 'undo header'
                  , 'undo block'
                  )
  AND s.name IN ('db block gets', 'consistent gets')
GROUP BY
    i.instance_name
  , w.class
  , w.count
ORDER BY
    i.instance_name
  , w.class;

Voir aussi

  • Undo segments — détail des segments (taille, wraps, shrinks, optimal size)
  • Undo users — sessions détenant une transaction active sur un segment UNDO