1.产生原理

当一个数据块读入到sga中时,该块的块头(buffer header)会放置在一个hash bucket的链表(hash chain)中。该内存结构由一系列cache buffers chains子latch保护(又名hash latch或者cbc latch)。对Buffer cache中的块,要select或者update、insert,delete等,都得先获得cache buffers chains子latch,以保证对chain的排他访问。若在过程中发生争用,就会等待latch:cache buffers chains事件。

2.产生原因:

(1). 低效率的SQL语句(主要体现在逻辑读过高) 在某些环境中,应用程序打开执行相同的低效率SQL语句的多个并发会话,这些SQL语句都设法得到相同的数据集,每次执行都带有高 BUFFER_GETS(逻辑读取)的SQL语句是主要的原因。相反,较小的逻辑读意味着较少的latch get操作,从而减少锁存器争用并改善性能。注意v$sql中BUFFER_GETS/EXECUTIONS大的语句。

(2).Hot block 当多个会话重复访问一个或多个由同一个子cache buffers chains锁存器保护的块时,热块就会产生。当多个会话争用cache buffers chains子锁存器时,就会出现这个等待事件。有时就算调优了SQL,但多个会话同时执行此SQL,那怕只是扫描特定少数块,也是也会出现HOT BLOCK的。

3.解决方法

(1).优化SQL,如优化nested loop join,如果有可能使用hash join代替nested loop join。

(2).可以利用对热块索引进行hash分区,或者使用hash簇的方式减缓热块现象。

(3).调整表的pctfree值,将数据尽可能的分布到多个块中,但相同的查询要扫更多块,有负面作用。

(4).并行查询是直接读数据文件,不经过SGA,即direct path read,所以就不存在锁存器争用的情况了。但其一般是为了大量数据读取而使用的,不作为一般的解决方案。

(5).等问题自己消失。有时当出现latch争用时,故障时刻确实没有较好的方式解决,找到病因才是关键。

4.查找热点快对象

是从当前等待latch:cache buffers chains事件的会话出发。通过v$session_wait视图,获得P1RAW即子锁存器的地址。通过重复观察v$session_wait视图,发现某个子锁存器地址较多地出现,那么该子锁存器管辖的chain可能有热块。

select p1,p1raw from v$session_wait where event='latch: cache buffers chains';

所以v$session的p1raw与x$bh的laddr,以及v$latch_children的addr是同样的东西,都是子锁存器的地址。大概思路是,通过子锁存器的热度来找到所管辖的对象,以及对象的热度。

通过子锁存器地址,即v$latch_children的addr字段,来获取这些子锁存器所管理的对象的文件号块号与热度。 注意到x$bh字典表中的tch字段表示的就是block的touch count,一般来说这个值越高那么这个块就越热,我们称这样的块就叫做热点块。

  1. SELECT hladdr,
  2. obj,
  3. (SELECT object_name
  4. FROM dba_objects
  5. WHERE (data_object_id IS NULL AND object_id = x.obj)
  6. OR data_object_id = x.obj AND ROWNUM = 1)
  7. AS object_name,
  8. dbarfil,
  9. dbablk,
  10. tch
  11. FROM x$bh x
  12. WHERE hladdr IN ('00000000DA253C08', '00000000DA380310')
  13. ORDER BY tch DESC;

根据FILE#,dbablk来找出对应对象。

  1. select * from dba_extents where file_id=10 and 36643122 between block_id and block_id + blocks - 1;
  1. select * from dba_extents where file_id=10 and 36643122 between block_id and block_id + blocks - 1;

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/15412087/viewspace-2148426/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/15412087/viewspace-2148426/

latch:cache buffers chains相关推荐

  1. 深入理解latch: cache buffers chains

    事件背景:    一个客户的数据库发生了宕机事件,查看了数据库的awr报告,原来是由于出现大量的latch: cache buffers chains等待事件导致系统消耗量大量的CPU,最终导致系统h ...

  2. 深入理解 latch: cache buffers chains

    事件背景:    一个客户的数据库发生了宕机事件,查看了数据库的awr报告,原来是由于出现大量的latch: cache buffers chains等待事件导致系统消耗量大量的CPU,最终导致系统h ...

  3. oracle数据库latch,关于Oracle数据库latch: cache buffers chains等待事件

    关于Oracle数据库latch: cache buffers chains等待事件 latch: cache buffers chains等待事件的原理 当一个数据块读入到sga中时,该块的块头(b ...

  4. latch: cache buffers chains故障处理总结

    客户说数据库的CPU使用率为100%,应用相应迟缓. 发现是latch: cache buffers chains 作祟 故障分析思路 查看等待事件,判断故障起因 1 SQL>select * ...

  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. Oracle等待事件(一)—— latch cache buffers chains 分析与优化思路

    一. 什么是CBC等待 首先我们需要知道CBC等待发生在哪里,为什么会发生,才能理解应该如何定位,如何处理. 首先,CBC latch是用于保护buffer cache的,因此CBC等待一定发生在bu ...

  7. oracle中的latch: cache buffers chains 与热块

    oracle中的latch: cache buffers chains 与热块 oracle中的latch: cache buffers chains 与热块 ORACLE中的buffer cache ...

  8. 等待事件 latch:cache buffers chains

    原理: 当一个数据块读入到sga中时,该块的块头(buffer header)会放置在一个hash bucket的链表(hashchain)中. 该内存结构由一系列cache buffers chai ...

  9. oracle等待资源时间加长,案例:Oracle等待事件latch: cache buffers chains故障优化处理总结...

    天萃荷净 数据库的CPU使用率为100%,应用相应迟缓.查看AWR中数据库的latch:cache buffers chains等待较多 当一个数据块读入sga区,相应的buffer header会被 ...

最新文章

  1. 2019春第二次课程设计实验报告
  2. 如何解一元一次方程视频_七年级数学教学视频-小邵课堂
  3. SD销售订单输入成本中心
  4. java 生成 xml dtd_使用DTD文件中的JAXB生成Java类 – 如何修改DTD?
  5. FPGA的PLL锁相环
  6. 【ZOJ - 3946】Highway Project(最短路子图,维护双权值,贪心,最小树形图)
  7. 改变numpy的大小_Numpy入门详细教程
  8. .NET文件上传的大小限制配置
  9. Redis持久化的原理及优化
  10. Linux 常用命令大全(非常全!!!)
  11. mysql 怎么创建B Tree索引_B-Tree,B+Tree以及mysql索引的实现
  12. php查看php进程
  13. JAVA程序设计教程-第2版-雍俊海 介绍以及 PDF+源代码+ppt 下载链接
  14. 在linux中PHP的集成环境吗,linux有没有php集成环境
  15. 小旋风虚拟服务器怎么用,超级小旋风asp服务器软件使用图文教程
  16. mysql 设置字节最大长度_mysql整型存储字节与最大长度设置
  17. zabbix简介及部署安装(邮件报警)
  18. python的符号怎么打_python plt可视化――打印特殊符号和制作图例代码
  19. 企业电子邮箱的企业网盘是什么?如何使用?
  20. ART与SART代数重建算法

热门文章

  1. DANet(双重注意力融合网络)
  2. FW:平凡(trivial)和非平凡(non-trivial)_拔剑-浆糊的传说_新浪博客
  3. 叶子结点和分支节点_结点数和叶子结点数有什么区别
  4. Unity游戏开发:文字冒险游戏项目实战
  5. 5款免费国外域名邮箱Mail.ru,Yandex,Zoho ,25Mail.St ,Postale申请和使用教程
  6. 一台计算机有多少公顷,亩换算成公顷(公顷换算成亩的计算器)
  7. 苹果致力于手势再生研发,无须使用控制器即可与 ARKit 交互?
  8. 【Azure Data Platform】ETL工具(21)——Azure Databricks使用(1)——访问Azure Blob
  9. 阿里云AMD服务器ECS计算型c6a实例CPU网络性能评测
  10. UAP扩展开发 - 新增按钮