Perf file io 7

De wiki.nexiat.fr
Aller à la navigation Aller à la recherche
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