Perf file io 7
| Fiche express | |
|---|---|
| Type | Script SQL*Plus de diagnostic (historique Oracle7/8) |
| Voir aussi | Perf file io · Perf file io efficiency · Perf file waits |
Perf file io 7 est l'ancêtre Oracle 7/8 de Perf file io : même objectif (volume de
lectures/écritures physiques par fichier et part de chacun dans le total), mais sans les vrais
tempfiles — introduits seulement en 8i — et avec une technique différente pour calculer le
total de référence : une variable de substitution SQL*Plus (COLUMN ... NEW_VALUE)
alimentée par une première requête, réutilisée ensuite via & dans la requête
principale. Ce script reste exécutable sur des versions récentes, mais Perf file io lui est
préférable dès qu'on veut inclure les tempfiles.
Script
-- Volume de lectures/écritures physiques par fichier de données (hors tempfiles).
-- Technique historique : le total de référence est capturé dans des variables de
-- substitution SQL*Plus (xphys_reads / xphys_writes) avant la requête principale.
SET LINESIZE 145
SET PAGESIZE 9999
SET VERIFY OFF
COLUMN phys_reads NEW_VALUE xphys_reads NOPRINT
COLUMN phys_writes NEW_VALUE xphys_writes NOPRINT
SELECT
SUM(phyrds) phys_reads
, SUM(phywrts) phys_writes
FROM
v$filestat
/
COLUMN name FORMAT a45 HEADING 'Fichier'
COLUMN phyrds FORMAT 999,999,999 HEADING 'Lectures phys.'
COLUMN read_pct FORMAT 999.99 HEADING '% Lectures'
COLUMN phywrts FORMAT 999,999,999 HEADING 'Écritures phys.'
COLUMN write_pct FORMAT 999.99 HEADING '% Écritures'
BREAK ON REPORT
COMPUTE SUM OF phyrds ON REPORT
COMPUTE SUM OF phywrts ON REPORT
COMPUTE AVG OF read_pct ON REPORT
COMPUTE AVG OF write_pct ON REPORT
SELECT
df.name name
, fs.phyrds phyrds
, fs.phyrds * 100 / DECODE('&xphys_reads', '0', 1, &xphys_reads) read_pct
, fs.phywrts phywrts
, fs.phywrts * 100 / DECODE('&xphys_writes', '0', 1, &xphys_writes) write_pct
FROM
v$datafile df
, v$filestat fs
WHERE
df.file# = fs.file#
ORDER BY
fs.phyrds DESC
/
Le DECODE('&xphys_reads', '0', 1, &xphys_reads) corrige un bug latent du script
d'origine : si l'instance vient de démarrer et qu'aucune I/O n'a encore eu lieu, le total capté
vaut 0 et la division échoue (ORA-01476) ; le DECODE substitue 1 dans
ce cas précis, ce qui donne un pourcentage à 0 plutôt qu'une erreur.
Voir aussi
- Perf file io — version actuelle, couvrant aussi les tempfiles
- Perf file io efficiency — I/O par bloc plutôt que volume brut
- Perf file waits — contention par fichier