Perf file io

De wiki.nexiat.fr
Aller à la navigation Aller à la recherche
Fiche express
Type Script SQL*Plus de diagnostic
Voir aussi Perf file io 7 · Perf file io efficiency · Perf file waits

Perf file io mesure le volume d'I/O physique (lectures/écritures) par fichier de données et par tempfile, avec la part de chacun dans le total de l'instance — la version « moderne » (Oracle 8i et suivants) de la famille des scripts d'I/O par fichier, qui couvre les vrais tempfiles introduits en 8i, à la différence de Perf file io 7. Pour l'angle « efficacité » (I/O par bloc plutôt que volume brut), voir Perf file io efficiency ; pour la contention plutôt que le volume, voir Perf file waits.

Script

-- Volume de lectures/écritures physiques par fichier (données + tempfiles),
-- avec la part de chaque fichier dans le total de l'instance.

SET LINESIZE 145
SET PAGESIZE 9999
SET VERIFY OFF

COLUMN ts_name    FORMAT a15          HEADING 'Tablespace'
COLUMN fname       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.tablespace_name                                   ts_name
  , df.file_name                                          fname
  , fs.phyrds                                              phyrds
  , (fs.phyrds  * 100) / NULLIF(fst.pr + tst.pr, 0)        read_pct
  , fs.phywrts                                             phywrts
  , (fs.phywrts * 100) / NULLIF(fst.pw + tst.pw, 0)        write_pct
FROM
    sys.dba_data_files df
  , v$filestat         fs
  , (SELECT SUM(f.phyrds) pr, SUM(f.phywrts) pw FROM v$filestat f) fst
  , (SELECT SUM(t.phyrds) pr, SUM(t.phywrts) pw FROM v$tempstat t) tst
WHERE
    df.file_id = fs.file#
UNION
SELECT
    tf.tablespace_name                                   ts_name
  , tf.file_name                                          fname
  , ts.phyrds                                              phyrds
  , (ts.phyrds  * 100) / NULLIF(fst.pr + tst.pr, 0)        read_pct
  , ts.phywrts                                             phywrts
  , (ts.phywrts * 100) / NULLIF(fst.pw + tst.pw, 0)        write_pct
FROM
    sys.dba_temp_files tf
  , v$tempstat          ts
  , (SELECT SUM(f.phyrds) pr, SUM(f.phywrts) pw FROM v$filestat f) fst
  , (SELECT SUM(t.phyrds) pr, SUM(t.phywrts) pw FROM v$tempstat t) tst
WHERE
    tf.file_id = ts.file#
ORDER BY
    phyrds DESC
/

Les statistiques de v$filestat/v$tempstat sont cumulées depuis le démarrage de l'instance : pour une lecture pertinente à chaud, il faut soit comparer deux relevés successifs (delta), soit s'appuyer sur un outil qui le fait pour vous (Statspack/AWR).

Voir aussi