Oracle Study之--Oracle等待事件(3)
创新互联长期为数千家客户提供的网站建设服务,团队从业经验10年,关注不同地域、不同群体,并针对不同对象提供差异化的产品和服务;打造开放共赢平台,与合作伙伴共同营造健康的互联网生态环境。为东山企业提供专业的做网站、成都网站建设,东山网站改版等技术服务。拥有10年丰富建站经验和众多成功案例,为您定制开发。
Db file parallel read
这是一个很容易引起误导的等待事件,实际上这个等待事件和并行操作(比如并行查询,并行DML)没有关系。 这个事件发生在数据库恢复的时候,当有一些数据块需要恢复的时候,Oracle会以并行的方式把他们从数据文件中读入到内存中进行恢复操作。
这个等待事件包含三个参数:
Files: 操作需要读取的文件个数。
Blocks: 操作需要读取的数据块个数。
Requests: 操作需要执行的I/O次数。
案例分析:
11:06:16 SYS@ prod>conn scott/tiger Connected. 11:06:19 SCOTT@ prod>insert into emp1 select * from emp1; 286720 rows created. Elapsed: 00:00:02.04 11:07:22 SCOTT@ prod>/ 573440 rows created. 11:08:07 SYS@ prod>r 1 select event,TOTAL_WAITS,AVERAGE_WAIT from v$system_event 2* where upper(event) like 'DB FILE%' EVENT TOTAL_WAITS AVERAGE_WAIT ---------------------------------------------------------------- ----------- ------------ db file sequential read 4449 .04 db file scattered read 1650 .02 db file single write 36 .39 db file async I/O submit 133 8.69 db file parallel read 37 .19 Elapsed: 00:00:00.02 11:08:20 SYS@ prod>r 1 select event,TOTAL_WAITS,AVERAGE_WAIT from v$system_event 2* where upper(event) like 'DB FILE%' EVENT TOTAL_WAITS AVERAGE_WAIT ---------------------------------------------------------------- ----------- ------------ db file sequential read 7561 .03 db file scattered read 1785 .02 db file single write 36 .39 db file async I/O submit 160 10.29 db file parallel read 39 .19 Elapsed: 00:00:00.02
Db file parallel write
这是一个后台等待事件,它同样和用户的并行操作没有关系,它是由后台进程DBWR产生的,当后台进程DBWR向磁盘上写入脏数据时,会发生这个等待。
DBWR会批量地将脏数据并行地写入到磁盘上相应的数据文件中,在这个批次作业完成之前,DBWR将出现这个等待事件。如果仅仅是这一个等待事件,对用户的操作并没有太大的影响,当伴随着出现free buffer waits等待事件时,说明此时内存中可用的空间不足,这时候会影响到用户的操作,比如影响到用户将脏数据块读入到内存中。
当出现db file parallel write等待事件时,可以通过启用操作系统的异步I/O的方式来缓解这个等待。当使用异步I/O时,DBWR不再需要一直等到所有数据块全部写入到磁盘上,它只需要等到这个数据写入到一个百分比之后,就可以继续进行后续的操作。
这个等待事件有两个参数:
Requests: 操作需要执行的I/O次数。
Timeouts: 等待的超时时间。
案例分析:
1、关闭ASYNC I/O: 11:25:47 SYS@ prod>show parameter sync NAME TYPE VALUE ------------------------------------ ----------- ------------------------------ disk_asynch_io boolean FALSE tape_asynch_io boolean TRUE 11:25:53 SYS@ prod>select event,TOTAL_WAITS,AVERAGE_WAIT from v$system_event 11:25:58 2 where upper(event) like 'DB FILE%'; EVENT TOTAL_WAITS AVERAGE_WAIT ---------------------------------------------------------------- ----------- ------------ db file sequential read 2036 .02 db file scattered read 844 .01 db file single write 27 .69 db file parallel write 38 1.69 2、用户进行事务操作 11:24:02 SCOTT@ prod>conn scott/tiger Connected. 11:26:19 SCOTT@ prod>begin 11:26:38 2 for i in 1..100000 loop 11:26:38 3 execute immediate 'insert into t1 values ('||i||')'; 11:26:38 4 end loop; 11:26:38 5 end; 11:26:38 6 / 11:24:06 TOM@ prod>conn tom/tom Connected. 11:26:47 TOM@ prod>begin 11:26:57 2 for i in 1..100000 loop 11:26:57 3 execute immediate 'insert into scott.t1 values ('||i||')' ; 11:26:57 4 end loop; 11:26:57 5 end; 11:26:57 6 / 11:22:41 SYS@ prod>select event,TOTAL_WAITS,AVERAGE_WAIT from v$system_event 2* where upper(event) like 'DB FILE%' EVENT TOTAL_WAITS AVERAGE_WAIT ---------------------------------------------------------------- ----------- ------------ db file sequential read 3216 .02 db file scattered read 846 .01 db file single write 27 .69 db file parallel write 67 2.78 Elapsed: 00:00:00.02 3、解决方法 11:22:42 SYS@ prod>show parameter sync NAME TYPE VALUE ------------------------------------ ----------- ------------------------------ disk_asynch_io boolean TRUE tape_asynch_io boolean TRUE 11:22:43 SYS@ prod>select event,TOTAL_WAITS,AVERAGE_WAIT from v$system_event 2* where upper(event) like 'DB FILE%' EVENT TOTAL_WAITS AVERAGE_WAIT ---------------------------------------------------------------- ----------- ------------ db file sequential read 11801 .05 db file scattered read 1920 .03 db file single write 54 .35 db file async I/O submit 266 7.78 db file parallel read 39 .19 'db file parallel write ' 等待事件消失 !