在讲latch free事件的时候就说到,当一个session在读取或修改buffer cache里的内存的数据块时,首先需要获得cache buffers chains latch,获得之后,到hash chain上遍历直到找到需要的buffer header后,该session必须在该buffer header上以share或者exclusive模式获得一个buffer lock或一个buffer pin。一旦buffer header被lock或者pin住,session就会释放cache buffers chains latch,然后就可以在该buffer上进行操作了。如果暂时无法获得buffer pin,那么该session就会等待buffer busy waits等待事件,该等待事件不会出现在session的PGA里。

oracle提供了v$waitstat视图,视图记录的都是buffer busy waits等待事件发生时进行更新的,这个等待事件不能像latch free事件那样容易跟踪,也就是说在视图v$waitstat记录的都是buffer busy waits等待事件的统计数据,但这个视图统计的并不是明细的等待事件信息,如果要是诊断该等待事件,只有在碰见发生这个等待事件的时候,查询v$session_wait视图,从而才能找到解决办法,在处理buffer busy wait等待事件时,通过如下sql可以查询出发生等待的数据块类别和对应的segment:然后再根据不同的类型进行处理

select 'Segment Header' class,

a.segment_type, a.segment_name, a.partition_name

from dba_segments a, v$session_wait b

where a.header_file = b.p1

and a.header_block = b.p2

and b.event = 'buffer busy waits'

union

select 'Freelist Groups' class,

a.segment_type, a.segment_name, a.partition_name

from dba_segments a, v$session_wait b

where b.p2 between a.header_block + 1 and (a.header_block + a.freelist_groups)

and a.header_file = b.p1

and a.freelist_groups > 1

and b.event = 'buffer busy waits'

union

select a.segment_type || ' block' class,

a.segment_type, a.segment_name, a.partition_name

from dba_extents a, v$session_wait b

where b.p2 between a.block_id and a.block_id + a.blocks - 1

and a.file_id = b.p1

and b.event = 'buffer busy waits'

and not exists (select 1

from dba_segments

where header_file = b.p1

and header_block = b.p2);

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

select'Segment Header'class,

a.segment_type,a.segment_name,a.partition_name

fromdba_segmentsa,v$session_waitb

wherea.header_file=b.p1

anda.header_block=b.p2

andb.event='buffer busy waits'

union

select'Freelist Groups'class,

a.segment_type,a.segment_name,a.partition_name

fromdba_segmentsa,v$session_waitb

whereb.p2betweena.header_block+1and(a.header_block+a.freelist_groups)

anda.header_file=b.p1

anda.freelist_groups>1

andb.event='buffer busy waits'

union

selecta.segment_type||' block'class,

a.segment_type,a.segment_name,a.partition_name

fromdba_extentsa,v$session_waitb

whereb.p2betweena.block_idanda.block_id+a.blocks-1

anda.file_id=b.p1

andb.event='buffer busy waits'

andnotexists(select1

fromdba_segments

whereheader_file=b.p1

andheader_block=b.p2);

1) 如果数据块类型为data block,如果版本为10g之前,则可以同时参照p3列的值来共同诊断。如果p3为130意味着同时有很多session在访问同一个data block,而且该data block没有在内存里,而必须从磁盘上获取。有三种方法可以降低该事件出现的频率:

a、降低并发性。这个比较难实现。

b、找出并优化含有这些segment的SQL语句,以降低物理和逻辑读。

c、增加freelists和freelist groups。

如果没有足够的freelists,当同时对同一个表进行insert时,这就很容易引起buffer busy waits等待。如果正在等待buffer busy waits的session正在进行insert操作,那么需要检查以下那个表有多少freelists了。当然,由于freelists的不足主要会导致对于segment header的buffer busy waits等待。

如果p3为220意味着有多个session同时修改在一个block(该block已经被读入内存了)里的不同的行。这种情况通常出现在高DML并发性的环境里。有三种方法可以降低该事件出现的频率:

a、降低并发性。这个比较难实现。

b、通过增加pctfree减少block里含有的行数。

c、将该对象移到拥有较小block尺寸的表空间里(9i或以上)。

2) 如果数据块类型为data segment header(表或索引的segment header,不是undo segment header)上发生buffer busy waits等待事件,通常表明数据库里有些表或索引的段头具有频繁的活动。

进程访问segment header主要有两种原因:一是获得或修改process freelists信息;二是扩展HWM。有三种方法可以降低该事件出现的频率:

a、增加争用对象的freelists和freelist groups的数量。

b、确定pctfree和pctused之间的间隔不要太小。

c、确保next extent的尺寸不要太小。

d、9i以后,使用ASSM特性来管理block。

3) 如果数据块类型为undo segment headers的争用等待,表明数据库中的rollback segments太少,或者他们的extent size太小,导致对于同一个segment header的大量更新。如果使用了9i以后的auto undo management,则不用处理,因为oracle会根据需要自动创建新的undo segments。如果是9i之前,则可以创建新的private rollback segments,并把它们online,或者通过降低transactions_per_rollback_segment参数来减轻该等待。

4) 如果数据块类型为undo block,说明有多个session同时访问那些被更新过的block。这是应用系统的问题,在数据库来说对此无能为力。

转载请注明: 版权所有,文章允许转载,但必须以链接方式注明源地址,否则追究法律责任!

最后编辑:2014-01-21作者:Jerry

一个积极向上的小青年,热衷于分享--Focus on DB,BI,ETL

mysql busy buffer_与buffer cache相关的等待事件—buffer busy waits等待事件!相关推荐

  1. Oracle优化 -- 关于Database Buffer Cache相关参数DB_CACHE_SIZE的优化设置

    select size_for_estimate, buffers_for_estimate ,ESTD_PHYSICAL_READ_factor,ESTD_PHYSICAL_READS from v ...

  2. buffer cache 深度解析

    本文首先详细介绍了oracle中buffer cache的概念以及所包含的内存结构.然后结合各个后台进程(包括DBWRn.CKPT.LGWR等)深入介绍了oracle对于buffer cache的管理 ...

  3. Oracle性能调优之--Buffer cache 的调整与优化

    Oracle性能调优之--Buffer cache 的调整与优化 Buffer Cache是SGA的重要组成部分,主要用于缓存数据块,其大小也直接影响系统的性能.当Buffer Cache过小的时候, ...

  4. 和linux关系_Linux内核Page Cache和Buffer Cache关系及演化历史

    在我们进行数据持久化,对文件内容进行落盘处理时,我们时常会使用fsync操作,该操作会将文件关联的脏页(dirty page)数据(实际文件内容及元数据信息)一同写回磁盘.这里提到的脏页(dirty ...

  5. Oracle - 使用各种SQL来熟知buffer cache使用情况

    这篇文章是参照甲骨论老相老师的教学视频: http://v.youku.com/v_show/id_XMzkyMjE3NTA0.html 所做的学习笔记 1. 查看某个对象所占用buffer状态: 上 ...

  6. linux刷新磁盘_Linux内核Page Cache和Buffer Cache关系及演化历史

    在我们进行数据持久化,对文件内容进行落盘处理时,我们时常会使用fsync操作,该操作会将文件关联的脏页(dirty page)数据(实际文件内容及元数据信息)一同写回磁盘.这里提到的脏页(dirty ...

  7. Linux系统中的Page cache和Buffer cache

    Free命令显示内存 首先,我们来了解下内存的使用情况: Mem:表示物理内存统计 total:表示物理内存总量(total = used + free) used:表示总计分配给缓存(包含buffe ...

  8. Oracle - Log buffer 的相关设置

    这篇文章是参考甲骨论老相老师的教学视频: http://v.youku.com/v_show/id_XMzk2MjQ5Mzc2.html 所做的教学视频 1. 触发LGWR 将log buffer里的 ...

  9. ORACLE (5): buffer cache(CBC LATCH实验)

    什么是cache buffers chains latch 当用户执行一条select语句的过程如下: 1.根据记录找到对应的DBA: 比如: SQL> select dbms_rowid.RO ...

  10. mysql等待事件类型_【等待事件】User I/O类 等待事件(2.9)--local write wait

    [等待事件]User I/O类 等待事件(2.9)--local write wait SELECTA.* FROMV$EVENT_NAME A WHERENAMEIN('local write wa ...

最新文章

  1. oracle数据库性能awr,常见问题:如何使用AWR报告来诊断数据库性能问题
  2. css flexbox模型_5分钟内学习CSS Flexbox-初学者教程
  3. 1000万个“AI名师”:用机器算法“解剖”应试教育 | AI聚变
  4. 靠 GitHub 打赏谋生的程序员,他们是怎么做的?
  5. 那些年,杜蕾斯紧跟热点的骚包文案有哪些?
  6. pix2pix 学习笔记
  7. 这可能是最生动的加密相关科普文章
  8. 新浪微博爬虫设计(Python版)
  9. linux下搜狗输入法无法输入中文解决方法
  10. python 降维 聚类_比PCA降维更高级——(R/Python)t-SNE聚类算法实践指南
  11. C++ 流类和流对象
  12. [转]flash在C#中的应用
  13. redis批量删除键的操作
  14. paip.XXListener is already configured监听器已经被配置的解决
  15. Linux之YUM方式安装SVN
  16. 尚硅谷大数据Hadoop(1)技术之Hadoop(入门)
  17. PCWorld:微软Google进军社交搜索需解决八问题
  18. C++面向对象程序设计——简单的商品销售题
  19. 全国计算机等级考试c语言编程题,全国计算机等级考试C语言编程题(附答案)
  20. 【Word】下载的word文档(doc格式)编辑后出现(同文件名.files)的文件夹--解决办法

热门文章

  1. 2019配电安规电子版_2018年配电安规.docx
  2. 陀螺仪和加速度传感器
  3. 服务端性能测试入门指南
  4. CUDA加速——共享内存介绍及其应用
  5. 【无线上网】无线网络小常识
  6. 创建物理卷报错Can‘t open /dev/sdb5 exclusively. Mounted filesystem的问题解决过程记录
  7. 计算机显卡不工作,笔记本独立显卡不工作的解决方案!
  8. 信息技术在园林绿化技师试题测试中的应用
  9. 【Python学习】Python的点滴积累
  10. iOS友盟社会化分享完全攻略