转载自:http://blog.csdn.net/cymm_liu/article/details/7968537
非空闲等待之:buffer busy waits
buffer busy wait :当一个进程需要的block被其他进程pin住的时候,这个进程就会产生buffer busy wait
为了保证数据的一致性,一个block在一个时间点只能被一个进程pin住进行读写
  1. 事件参数说明:

事件号

事件名

参数一

参数二

参数三

145

buffer busy waits

file#

block#

9i - 原因码

10g - block class#

  1. ORACLE会话正在等待PIN住一个缓冲区,会话必须在读取或修改缓冲区之前将该缓冲区PIN住。
  2. 在任何时侯只有一个进程可以PIN住一个缓冲区。
  3. buffer busy waits表明读/读、读/写、写/写争用。
  4. 根据P3中指明的原因码有不同的处理方式。
  5. 现象描述:会话在SGA中读取或修改缓冲区之前,必须要先获取cahce buffers chains锁存器(latch),获取后然后遍历这个缓冲区链,直到发现它需要的缓冲区头。然后以共享方式或独占方式获取该缓冲区锁或缓冲区头部的PIN,一旦缓冲区被PIN住,会话即释放cache buffers chains锁存器。如果无法获得PIN,会话就在buffer busy waits等待事件上等待。
  6. 该事件只与SGA中缓冲区相关,与会话私有的PGA中执行的读/写操作无关。


处理该等待事件时主要注意以下四方面:

1) 该等待事件主要的原因码是什么?(参数P3)

2) buffer busy waits事件需要的块类?(由P1即可找出等待块的类列)

3) 缓冲区所属的段(由P1和P2参数配合视图v$extents即可找出等待块的所属段)

select s.segment_name, s.partition_name 
  from dba_extents s 
where <P2的值> between s.block_id and (s.block_id + s.blocks -1) and s.file_id = <P1的值>

4) 和buffer busy waits事件相关的SQL语句

虽然buffer busy waits事件的发生可能至少有十个不同的原因,但是代码130和220是最常见的原因。基本上,小于200的代码号意味着这种等待是和I/O有关的。

带有原因码130的数据块(类#1)争用

1) 等待集中在数据块上,并且原因码是130,则意味着多个会话并发请求相同的数据块,但该数据块并不在缓冲存储器中,并且必须从磁盘读取。

2) 当多个会话请求不在缓冲存储器中的相同数据块时,ORACLE可以聪明地防止每个会话进行相同的操作系统I/O调用。否则,这可能严重地增加系统I/O的数量,所以,ORACLE只允许一个会话执行实际的I/O,而其他的会话在buffer busy waits上等待块,执行I/O的会话在db file sequential read或db file scattered read等待事件上等待。

3) 可在v$session视图中检查SESSION的注册时间,并且等待事件db file sequential(scattered) read和buffer busy waits等待相同的文件号和块号。

4) 解决方法:优化SQL语句,尽可能地减少逻辑读和物理读;

带有原因码220的数据块(类#1)争用

1) 等待集中在数据块上,并且原因码是220,则意味着多个会话同时在相同的对象上执行DML(相同块中的不同行)。

2) 如果数据块的尺寸较大(>=16K),则可能强化这种现象,因为较大的块一般在每个块中包含更多的行。

3) 减少这种情况的等待的方法:减少并发;减少块中行的数量;在另一个具有较小块尺寸的表空间中重新构建对象。

4) 具体方法说明:

使用较大的PCTFREE重新构建表或索引;

使用alter table <table_name> minimize records_pre_block命令改变表以最小化每个块的最小行数

从ORACLE9i开始,可以在另一个具有较小块尺寸的表空间中移动或重新构建对象。

注:虽然这些方法可以最小化buffer busy waits问题,但它们无疑会增加全表扫描时间和磁盘空间利用率。

数据段头(类#4)的争用

1) 如果buffer busy waits的等待事件主要集中在数据段头(即表或索引段头,并且不是UNDO段头)上,这意味着数据库中一些表或索引有高段头活动。

注:进程出于两个主要原因访问段头,一是,获得或修改FREELISTS信息;二是,为了扩展高水位标记(HWM)。

2) 减少这种情况的等待的方法:

>> 对使用自由表进行段管理的表,增加确认对象的FREELISTS和FREELIST GROUPS(注:FREELIST GROUPS的增加也是必须的);

>> 确保FCTFREE和PCTUSED之间的间隙不是太小,从而可以最小化FREELIST的块循环。

>> 下一区的尺寸不能太小,当区高速扩张时,建立的新区需要修改在段头中区映射表。可以考虑将对象移动到合理的、统一尺寸的本地管理的表空间中。

撤销段头(类#17)的争用

1) 如果buffer busy waits等待事件主要集中在撤销段头,这表明数据库中的回滚段过少或者是它们的区尺寸太小,从而造成对段头的频繁更新。如果使用ORACLE9I的由数据库系统管理UNDO段,就不需要处理这种问题,因为ORACLE会根据需要增加额外的的UNDO段。

2) 可以创建并启用私有回滚段,以减少每个回滚段的事务数量。需要修改init.ora文件中的ROLLBACK_SEGMENTS参数。

3) 如果使用公用回滚段可以减少初始化参数transactions_per_rollback_segment的值,ORACLE通过transactions/transactions_per_rollback_segment来获取公有回滚段的最小数量。

撤销块的争用(类#18)

1) 如果buffer busy waits等待事件主要集中在撤销块上,这表明有多个并发会话为保证一致性读同时查询更新的数据。

2) 这是应用程序存在问题,当应用程序在不同时间内运行查询和DML时,这种问题不会存在。

附注:

一、查看系统所有段的有关buffer busy waits事件的统计:

SELECT * 
  FROM v$segment_statistics s 
WHERE s.statistic_name = 'buffer busy waits' 
AND s.owner <> 'SYS'

等待事件buffer busy waits相关推荐

  1. buffer busy waits等待事件的原因:hot block [转]

    http://blog.chinaunix.net/u/24260/showart_456274.html ********************************************** ...

  2. Oracle等待事件(三)—— buffer busy waits 常见原因及对应解决方法

    也先看看buffer busy waits在官方文档中的描述 This wait indicates that there are some buffers in the buffer cache t ...

  3. 前台等待事件 oracle,Oracle等待事件之buffer busy waits

    产生原因 官方定义: This wait happens when a session wants to access a database block in the buffer cache but ...

  4. buffer busy waits等待事件案例-vage

    讨厌香草冰激凌的汽车与Buffer busy wiats的故事 记得好几年前看到过一个故事,通用公司曾收到一客户的邮件,邮件中客户描述了一个非常奇怪的问题.他们家有晚饭后去吃冰激凌的习惯,如果他们买的 ...

  5. latch: cache buffers chains 阻塞 buffer busy waits

    os: centos 7.4 db: oracle 11.2.0.4 版本 # cat /etc/centos-release CentOS Linux release 7.4.1708 (Core) ...

  6. buffer busy waits

    当进程需要存取SGA中的buffer的时候,它会依次执行如下步骤的操作: 1.获得cache buffers chains latch,遍历那条buffer chain直到找到需要的buffer he ...

  7. buffer busy waits理解

    一.什么是buffer busy waits 当n个进程想以不兼容的模式持有内存块上的buffer pin时,就会产生buffer busy waits等待. oracle访问/修改数据块的步骤: 1 ...

  8. Buffer Busy Waits的两个结论

    官方文档: This wait indicates that there are some buffers in the buffer cache that multiple processes ar ...

  9. 等待事件系列(1)--User I/O类型

    等待事件系列(1)--User I/O类型 1  BLOG文档结构图 2  前言部分 2.1  导读和注意事项 各位技术爱好者,看完本文后,你可以掌握如下的技能,也可以学到一些其它你所不知道的知识,~ ...

最新文章

  1. Merge into的使用
  2. 我把SpringBoot项目从18.18M瘦身到0.18M,部署起来真省事!
  3. mysql安装图解 mysql图文安装教程(详细说明)
  4. Ubuntu终端字体颜色方案
  5. If you study Math, Physics and Chemistry well, you will be the strongest of the world and the truth
  6. 树结构遍历节点名字提取,这里提取的是el-tree数据结构,封装成函数
  7. 学习Raft算法的笔记
  8. 手机pdf文件转语音_没有电脑也能处理PDF文件,手机里的这个功能太强大!
  9. 《KyLin学习理解》-01-KyLin麒麟的简介及其思想
  10. C#回车切换焦点实现实例解析
  11. ubuntu设置python3.7为默认(python版本切换)
  12. redis实现排行查询及排序及分页
  13. 企业安全监控zabbix安装部署方案—二进制安装
  14. cat3 utp是不是网线_五类网线(CAT 5E/CAT 3 UTP)
  15. 学习廖雪峰的Git教程
  16. php 公众号推送图片尺寸,微信公众号推送文图片什么尺寸最佳?
  17. 【网络与系统安全实验】欺骗攻击及防御技术
  18. 戴尔电脑能升级鸿蒙系统嘛,戴尔台式机预装win10家庭版升级win10专业版方法教程...
  19. ERP编制物料清单 华夏
  20. font-awesome_Font Awesome如何成为Kickstarter上资金最多的软件项目-我们可以从中学到什么

热门文章

  1. Facebook最新Libra币开发指南---接口服务器开发
  2. 电竞英雄联盟数据API接口 - 【近期赛事列表】API调用示例代码
  3. bars 除障句完整_精选每日一句早安问候语语录49句
  4. 网吧XP无盘系统集成优化及母盘封装
  5. [折腾向]树莓派3B+安装系统(Raspbian)以及配置环境
  6. c语言肤色检测,基于肤色的人脸检测
  7. 义乌义川机器人_义乌毛氏发源地——尚阳
  8. 51单片机小知识总结
  9. python个人总结(二)
  10. 人工智能-动物识别系统