Oracle 常见的几种等待事件

等待事件分为主动触发事件与被动触发事件。
主动触发事件:发生一次就进性一次记录,例如IO等
被动触发事件:例如latch的获取,只有当遇到阻塞时,获取不到时,才会记录该等待事件,如果没有阻塞,即使获取的时间再长,也不会记录该事件。

buffer busy wait:

读不阻塞写,写阻塞读。等待的元凶只能是DML语句
因为当一个用户A读取buffer时,首先获得CBC latch,然后修改buffer pin的锁为共享模式,然后释放CBC latch,此时用户B修改buffer,获得CBC latch,发现buffer pin上有共享锁,会克隆一个这个buffer,克隆后,源buffer的状态改为CR,新复制的buffer状态改为xcur,修改新复制的buffer 的buffer pin为独占模式,新复制的buffer用于修改。当此时再有一个用户C读取buffer时,发现新复制的buffer上有独占buffer pin。所以只能等待,会产生buffer busy wait。

log buffer space:

如果log buffer中没有空间,进程会先等待lgwr刷新log buffer中的空间。

DB file parallel write:

当DBWR写脏块时,会将脏块从检查点队列中移到各个对象的对象链表上进行合并(整合),如果一次性要写入的脏块太多,Oracle会分批进行合并,也就是将要写入的脏块分成几个Batch,然后分别依次对每个Batch进行合并,当第一个Batch开始写脏块前,DBWR会记录一个等待事件db file parallel write,直到这一个Batch所有脏块的写操作都完成了,db file parallel write事件才结束。可以通过db file parallel write 确定Batch的个数。
对象链表:用于写IO合并

free buffer wait:

当服务器进程扫描LRU链表寻找可用块时,如果找了百分之40的buffer(百分之40受_db_block_max_scan_pct控制)还没有找到可以覆盖的buffer,进程将停止继续扫描LRU,唤醒DBWR写脏块,同时进程转入睡眠,开始等待free buffer waits。

log file switch:

日志切换等待,需要等待DBWR写完下一个要覆盖的日志中脏块。

db file scattered read:

全表扫描等多块读访问路径触发的等待事件

db file sequence read:

单块读访问路径触发的等待事件

direct path read

将数据块直接读取到PGA中而不是SGA,当出现该等待事件时,意味着PGA空闲空间不足。

direct path write

直接从PGA写入磁盘文件上,不经过SGA

陆续补充!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值