第7 章、解释与延迟有关的等待事件
1. Log file sync 等待事件:
l 关键思想:
u Log file sync 等待事件和事务的终止(提交或者回滚)有关。
u 当进程在此事件上等待太久,表明事务太短和过度的提交。
l 促使LGWR 进程写日志的动作有:
1) 每隔3 秒。
2) 日志缓冲区1/3 已满,或具有1M 的redo entry 。
3) 用户提交。
4) 当DBWR 进程发出信号(在记录写入之前,通常是由于脏数据太多,DBWR 急于写脏数据)
l 高log file sync 等待事件出现的原因:
1) 高提交频率
2) 缓慢的I/O 子系统
3) 过大的log buffer
2. Log buffer space 等待事件:
l 除了log buffer space 等待事件之外,Oracle 还在v$sysstat 和v$sesstat 视图中记录redo buffer allocation retries 统计。一般此事件是有2 种原因引起:1 、SGA 中日志缓冲区太小;2 、LGWR 写出日志的速度太慢。
3. Free buffer waits 等待事件:
l 将一个块读入内存之前,Oracle 必须在Buffer cache 中找到能够存放该块的位置,如果没有足够的空间来存放,那么就需要清理LRU 中的块,Oracle 9i 中默认扫描40% 的LRU ,如果还没有找到,那么就通知DBWR 进程写脏数据,清除足够的位置,当DBWR 进程工作时,Oracle 会话在buffer busy wait 上等待。
l V$sysstat 中的log buffer inspected 和log buffer requested 统计信息,记录了Oracle 进程扫描LRU 和请求空缓冲区的次数,如果前者大于后者,则表明系统可能有不正常的情况。
l 会话在log buffer waits 上的等待可能有5 种原因:
1) 低效率的SQL 语句。
2) 不充足的DBWR 进程:
从视图x$kcbwds 中可以查看工作集和DBWR 进程的对应关系:select set_id,dbwr_num from x$kcbwds;
3) 缓慢的IO 子系统。
4) 延迟块清除(delay cleanout )
Oracle DBWR 进程以各种时间间隔将已提交和未提交的块写入到磁盘中,在事物提交时,Oracle 对没有写出的块执行提交清除,对已经写出的块不做处理,这些不做处理的块,在下一次读取时被读取进程执行清除操作,这就是延迟块清除。
5) 较小的缓冲存储器
4. Write complete waits 等待事件:
l 关键思想:阻止Oracle 修改DBWR 进程正在写入的块。
l 当前台进程想要修改被DBWR 进程标记为“正在写入”的块,而标记为“正在写入”的块是不能被修改的,直到他们被写入磁盘并将标记清除。造成此等待事件的原因通常有:
1) 缓慢的I/O 子系统造成高DBWR 写出时间。
2) MTTR 太短,造成频繁的写出操作。
3) DBWR 写出批量尺寸太大,造成每次写出的时间过长。
4) Oracle 8i 之前的写出批量是4096 块,从8i 开始默认写批量的大小改为204 块。
5. Log file switch completion 等待事件:
l 关键思想:较小的日志文件和大量的redo entry 造成了过多的日志切换。
l 我们通常是保持在高峰期间每隔15~30min 切换一次日志文件。
6. Log file switch(checkpoint incomplete) 等待事件:
l 由于检查点未完成,切换日志的操作被迫等待。
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/24465008/viewspace-688094/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/24465008/viewspace-688094/