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.