十年网站开发经验 + 多家企业客户 + 靠谱的建站团队
量身定制 + 运营维护+专业推广+无忧售后,网站问题一站解决
Oracle Study之--Oracle等待事件(5)
创新互联建站-专业网站定制、快速模板网站建设、高性价比怒江州网站开发、企业建站全套包干低至880元,成熟完善的模板库,直接使用。一站式怒江州网站制作公司更省心,省钱,快速模板网站建设找我们,业务覆盖怒江州地区。费用合理售后完善,十载实体公司更值得信赖。
Db file single write
这个等待事件通常只发生在一种情况下,就是Oracle 更新数据文件头信息时(比如发生Checkpoint)。
当这个等待事件很明显时,需要考虑是不是数据库中的数据文件数量太大,导致Oracle 需要花较长的时间来做所有文件头的更新操作(checkpoint)。
这个等待事件有三个参数:
File#: 需要更新的数据块所在的数据文件的文件号。
Block#: 需要更新的数据块号。
Blocks: 需要更新的数据块数目(通常来说应该等于1)。
案例分析:
15:03:26 SYS@ prod>select event,TOTAL_WAITS,AVERAGE_WAIT from v$system_event 15:03:31 2 where upper(event) like 'DB FILE%'; EVENT TOTAL_WAITS AVERAGE_WAIT ---------------------------------------------------------------- ----------- ------------ db file sequential read 2093 .01 db file scattered read 833 .02 db file single write 27 .28 db file parallel write 5 17.48 15:03:51 SYS@ prod>alter system checkpoint; System altered. 15:03:35 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 2673 .01 db file scattered read 833 .02 db file single write 36 .55 db file parallel write 7 14.73 Elapsed: 00:00:00.01
Direct path read
这个等待事件发生在会话将数据块直接读取到PGA当中而不是SGA中的情况,这些被读取的数据通常是这个会话私有的数据,所以不需要放到SGA作为共享数据,因为这样做没有意义。这些数据通常是来自于临时段上的数据,比如一个会话中SQL的排序数据,并行执行过程中间产生的数据,以及Hash Join,merge join产生的排序数据,因为这些数据只对当前的会话的SQL操作有意义,所以不需要放到SGA当中。
当发生direct path read等待事件时,意味着磁盘上有大量的临时数据产生,比如排序,并行执行等操作。或者意味着PGA中空闲空间不足。
这个等待事件有三个参数:
Descriptor address: 一个指针,指向当前会话正在等待的一个direct read I/O。
First dba: descriptor address 中最旧的一个I/O数据块地址。
Block cnt: descriptor address上下文中涉及的有效的buffer 数量。
Direct path write
这个等待事件和direct path read 正好相反,是会话将一些数据从PGA中直接写入到磁盘文件上,而不经过SGA。
这种情况通常发生在:
使用临时表空间排序(内存不足)
数据的直接加载(使用append方式加载数据)
并行DML操作。
这个等待事件有三个参数:
Descriptor address: 一个指针,指向当前会话正在等待的一个direct I/O.
First dba: descriptor address 中最旧的一个I/O数据块地址。
Block cnt: descriptor address 上下文中涉及的有效地 buffer 数量。
案例分析:
15:37:17 SCOTT@ prod> 1* select * from t1 order by 1 600000 rows selected. Elapsed: 00:00:04.35 Execution Plan ---------------------------------------------------------- Plan hash value: 2148421099 ----------------------------------------------------------------------------------- | Id | Operation | Name | Rows | Bytes |TempSpc| Cost (%CPU)| Time | ----------------------------------------------------------------------------------- | 0 | SELECT STATEMENT | | 838K| 10M| | 4260 (1)| 00:00:52 | | 1 | SORT ORDER BY | | 838K| 10M| 16M| 4260 (1)| 00:00:52 | | 2 | TABLE ACCESS FULL| T1 | 838K| 10M| | 276 (2)| 00:00:04 | ----------------------------------------------------------------------------------- Note ----- - dynamic sampling used for this statement (level=2) Statistics ---------------------------------------------------------- 7 recursive calls 3 db block gets 1355 consistent gets 1823 physical reads 0 redo size 10809270 bytes sent via SQL*Net to client 440512 bytes received via SQL*Net from client 40001 SQL*Net roundtrips to/from client 0 sorts (memory) 1 sorts (disk) 600000 rows processed 15:36:39 SYS@ prod>select event,TOTAL_WAITS,AVERAGE_WAIT from v$system_event 2* where upper(event) like 'DIRECT%' EVENT TOTAL_WAITS AVERAGE_WAIT ---------------------------------------------------------------- ----------- ------------ direct path read 154 .03 direct path read temp 1746 0 direct path write temp 63 .98 Elapsed: 00:00:00.04 15:37:31 SYS@ prod>