CKPT进程将会写数据文件和控制文件。CKPT进程一般在检查点时写这两种文件。

DBWR进程比较专一,只用来写数据文件。LGWR也是一个专一的进程,它只写日志文件。而ARCn进程将会读日志文件的内容,并写到归档日志文件中,这个操作其实就是归档操作。同时,在归档完成后,ARCn为更新控制文件的归档信息,SERVER是服务器进程,它负责为用户读写数据文件。

         对于数据库相关的数据文件和日志文件,已经证明性能与安全最好就是RAID1+0了,特别是日志文件,由于要连续的写,RAID1+0可以提供最快的性能。注意日志文件一定不能使用RAID5,这样很容易造成日志文件的性能问题,从而影响整个数据库的工作。如果操作系统使用了LVM,我们还可以进行二次条带,二次条带的条带大小对数据库的I/O性能也有一定影响。

          与IO相关的视图与STATSPACK中的IO资料

          与IO相关的重要视图

       IO相关的资料没有被记录在V$SYSSTAT系列视图中,而是单独另设了两个视图: V$FILESTAT、V$TEMPSTAT。

desc V$FILESTAT
 Name       Null?    Type
 ---------------------------------------- -------- ---------------------------
 FILE#         NUMBER
 PHYRDS         NUMBER
 PHYWRTS        NUMBER
 PHYBLKRD        NUMBER
 OPTIMIZED_PHYBLKRD       NUMBER
 PHYBLKWRT        NUMBER
 SINGLEBLKRDS        NUMBER
 READTIM        NUMBER
 WRITETIM        NUMBER
 SINGLEBLKRDTIM        NUMBER
 AVGIOTIM        NUMBER
 LSTIOTIM        NUMBER
 MINIOTIM        NUMBER
 MAXIORTM        NUMBER
 MAXIOWTM        NUMBER

desc V$TEMPSTAT
 Name             Null? Type
 ----------------------------------------------------- -------- ------------------------------------
 FILE#        NUMBER
 PHYRDS        NUMBER
 PHYWRTS       NUMBER
 PHYBLKRD       NUMBER
 PHYBLKWRT       NUMBER
 SINGLEBLKRDS       NUMBER
 READTIM       NUMBER
 WRITETIM       NUMBER
 SINGLEBLKRDTIM       NUMBER
 AVGIOTIM       NUMBER
 LSTIOTIM       NUMBER
 MINIOTIM       NUMBER
 MAXIORTM       NUMBER



MAXIOWTM       NUMBER


SELECT  READTIM/PHYRDS,READTIM/PHYBLKRD FROM V$FILESTAT;
READTIM/PHYRDS READTIM/PHYBLKRD
-------------- ----------------
          0.25            0.125
         0.875 0.82352941176470
1.404647435897 0.79357175192394
0.708981612446 0.51568930041152
1.142857142857 0.72727272727272
           0.5              0.5


一般来说,大部门的磁盘系统都可以在十几毫秒左右读一个块,正常情况下也应该在20毫秒以内,超过20毫秒的话,要不就是负载过大,要不就是IO有问题了。

Tablespace
------------------------------
                 Av      Av     Av                    Av        Buffer Av Buf
         Reads Reads/s Rd(ms) Blks/Rd       Writes Writes/s      Waits Wt(ms)
-------------- ------- ------ ------- ------------ -------- ---------- ------
SYSTEM
             2       0   15.0     1.0            0        0          0    0.0
          -------------------------------------------------------------
^LFile IO Stats  DB/Inst: DBA/orcl  Snaps: 1-2
->Mx Rd Bkt: Max bucket time for single block read
->ordered by Tablespace, File

Tablespace               Filename
------------------------ ----------------------------------------------------
                        Av   Mx                                             Av
                 Av     Rd   Rd    Av                    Av        Buffer BufWt
         Reads Reads/s (ms)  Bkt Blks/Rd       Writes Writes/s      Waits  (ms)
-------------- ------- ----- --- ------- ------------ -------- ---------- ------
SYSTEM                   /u01/app/oracle/oradata/dba/system01.dbf
             2       0  15.0  16     1.0            0        0          0

          -------------------------------------------------------------

这里主要关注Av Rd(ms)列(reads per millisecond)的值,该值应该在20ms以内。如果超过100ms,基本可以肯定存在IO性能瓶颈。注意,以上的计时单位,在基本表中都是厘秒(百分之一秒),在计算中直接将其乘以10化为毫秒(千分之一秒)。需要明白其基本资料的统计,都是以厘秒为单位的。

create table my_io_stat as select * from v$filestat where 1=0;

Table created.

SYS@orcl> alter table my_io_stat add stat_date date default sysdate;

Table altered.

SYS@orcl> insert into my_io_stat select a.*,sysdate from v$filestat a where file#=4;

1 row created.

SYS@orcl> insert into my_io_stat select a.*,sysdate from v$filestat a where file#=4;

1 row created.

SYS@orcl> insert into my_io_stat select a.*,sysdate from v$filestat a where file#=4;

1 row created.

SYS@orcl> insert into my_io_stat select a.*,sysdate from v$filestat a where file#=4;

1 row created.

SYS@orcl> insert into my_io_stat select a.*,sysdate from v$filestat a where file#=4;

1 row created.

YS@orcl> set timing on
SYS@orcl> exec statspack.snap

PL/SQL procedure successfully completed.

Elapsed: 00:00:00.60
SYS@orcl> insert into my_io_stat select a.*,sysdate from v$filestat a where file#=4;

1 row created.

Elapsed: 00:00:00.00
SYS@orcl> insert into my_io_stat select a.*,sysdate from v$filestat a where file#=4;

1 row created.

Elapsed: 00:00:00.00

SYS@orcl> set timing off
SYS@orcl> insert into my_io_stat select a.*,sysdate from v$filestat a where file#=4;

1 row created.