Oracle 常见的几种等待事件

编程入门 行业动态 更新时间:2024-10-10 17:29:10

Oracle 常见的<a href=https://www.elefans.com/category/jswz/34/1769370.html style=几种等待事件"/>

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

陆续补充!

更多推荐

Oracle 常见的几种等待事件

本文发布于:2024-03-23 19:15:56,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1741812.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:几种   常见   事件   Oracle

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!