Perf file waits
| Fiche express | |
|---|---|
| Type | Script SQL*Plus de diagnostic |
| Voir aussi | Perf file io · Perf file io efficiency · Owi event names |
Perf file waits compte, par fichier de données, le nombre d'attentes de type buffer busy waits et leur durée moyenne — un indicateur de contention (accès concurrents au même bloc) à distinguer du volume d'I/O mesuré par Perf file io : un fichier peut avoir un volume d'I/O modéré mais une forte contention si plusieurs sessions se disputent les mêmes blocs (cas classique : insertions concurrentes sur un index séquentiel, ou segments d'en-tête de table très sollicités).
Script
-- Buffer busy waits par fichier de données : nombre d'attentes et durée moyenne.
-- x$kcbfwait est une table fixe interne, à exécuter connecté avec les privilèges
-- nécessaires (SYS ou rôle disposant d'accès aux tables fixes).
SET LINESIZE 145
SET PAGESIZE 9999
COLUMN file_id FORMAT 999 HEADING 'Fichier #'
COLUMN filename FORMAT a55 HEADING 'Fichier'
COLUMN wait_count FORMAT 999,999,999 HEADING 'Attentes'
COLUMN wait_time_cs FORMAT 999,999,999 HEADING 'Durée totale (cs)'
COLUMN avg_wait_cs FORMAT 999.999 HEADING 'Durée moy. (cs)'
SELECT
a.indx + 1 file_id
, b.name filename
, a.count wait_count
, a.time wait_time_cs
, a.time / NULLIF(a.count, 0) avg_wait_cs
FROM
x$kcbfwait a
, v$datafile b
WHERE
a.indx < (SELECT COUNT(*) FROM v$datafile)
AND a.indx + 1 = b.file#
ORDER BY
a.time DESC
/
Les durées sont en centièmes de seconde, cumulées depuis le démarrage de l'instance. Pour une
analyse plus fine (répartition par bloc, par plage temporelle), les vues modernes
v$file_histogram et l'Active Session History (v$active_session_history
filtrée sur event = 'buffer busy waits') ou les rapports AWR complètent
avantageusement ce script.
Voir aussi
- Perf file io — volume de lectures/écritures par fichier
- Perf file io efficiency — I/O par bloc plutôt que par requête
- Owi event names — référentiel des événements d'attente Oracle