当前位置: 首页 > news >正文

Oracle如何解决LATCH:CACHE BUFFERS CHAINS

CACHE BUFFERS CHAINS LATCH主要用于保护HASH CHAIN结构。一个CACHE BUFFERS CHAINS LATCH保护着多条HASH CHAIN。可以通过查看隐含参数_db_block_hash_latches的值或者查询vlatch_children视图获得系统中CACHE BUFFER CHAIN LATCH的数量。目前系统中CACHE BUFFER CHAIN LATCH的数量为262144个,如下所示:

SQL> select count(*) from v$latch_children where name='cache buffers chains';

通过查看隐含参数_db_block_hash_buckets得知当前系统的HASH BUCKET数量为8388608,由于HASH BUCKETS和HASH CHAIN是一一对应关系,这也就意味着目前一个CACHE BUFFERS CHAINS LATCH需要保护8388608/262144=32个HASH CHAIN。由于CACHE BUFFERS CHAINS LATCH和HASH BUCKETS的数量随着BUFFER CACHE的增大而增多,所以随着BUFFER CACHE的增大,不同的数据块可能会被进一步分散到不同的HASH CHAIN中,从而降低HASH CHAIN争用的概率,从这个角度来说,在系统资源充足的前提下,增大BUFFER CACHE 没坏处。
前面提到,CACHE BUFFERS CHAINS LATCH主要用于保护HASH CHAIN内存结构,在以下两种情况下服务器进程需要获得CACHE BUFFERS CHAINS LATCH:
服务进程需要扫描HASH CHAIN中的数据块时。
服务器进程将数据块挂载到HASH CHAIN时。
LATCH: CACHE BUFFERS CHAINS等待事件的P1和P1RAW值表示CACHE BUFFERS CHAINS LATCH的地址,当发生LATCH: CACHE BUFFERS CHAINS等待事件时,可以通过V S E S S I O N W A I T 的 P 1 R A W 和 X SESSION_WAIT的P1RAW和X SESSIONWAITP1RAWXBH、DBA_OBJECTS关联来获取引起LATCH: CACHE BUFFERS CHAINS的对象,如下所示:
select sid, p1raw, p2, p3, seconds_in_wait, wait_time, state from v$session_wait
where event = ‘latch free’ order by p2, p1raw;–Oracle 10g以上latch free用cache buffers chains代替

– Using the P1RAW from the above example (00000400837D7800).
select a.hladdr, a.file#, a.dbablk, a.tch, a.obj, b.object_name from xKaTeX parse error: Expected 'EOF', got '#' at position 143: …ct hladdr, file#̲, dbablk, tch, …bh
where obj in (select obj from x$bh where hladdr = ‘070000003469A7D8’
minus select object_id from dba_objects
minus select data_object_id from dba_objects) and
hladdr = ‘070000003469A7D8’
order by 4;
当发生LATCH:CACHE BUFFERS CHAINS等待事件时,不能简单地扩大隐含参数_db_block_hash_latches来缓减CACHE BUFFERS CHAINS LATCH争用,而是应该进一步定位发生该问题的深层次原因。一般来讲,发生LATCH:CACHE BUFFERS CHAINS等待事件主要有以下2个原因:
低效的SQL。如多个进程同时大范围扫描表和索引。
HOT BLOCK。指的是多个并发进程同时读取同一个数据块 值得注意的是,如果单条SQL执行效率很高但多个进程并发执行时由于出现LATCH: CACHE BUFFERS CHAINS等待事件而导致性能下降,那么在这种情况下是无法根本性解决CACHE BUFFERS CHAINS LATCH争用的。简单设想一下,如果众多并发进程同时通过BUFFER CACHE读取一个数据块,由于该数据块受CACHE BUFFERS CHAINS LATCH保护,每个会话读取该数据块时都需要申请该LATCH,那么该LATCH的争用将不可避免。要解决这种类型的性能故障,只有重新调整应用,别无他法。
从Oracle 9i起,读取HASH CHAIN中某些类型的数据块(如唯一索引的根块)时,可以通过SHARED模式获取CACHE BUFFERS CHAINS LATCH,从而在一定程度减少LATCH:CACHE BUFFERS CHAINS等待事件的发生。

相关文章:

  • 阿里云服务器Ubuntu的git clone失败问题解决方案
  • 什么是防抖和节流?有什么区别?如何实现?
  • 新闻媒体发稿:社会实践返家乡主题如何选择
  • jvm对象压缩
  • 【工具变量】地级市健康城市试点政策数据集(2007-2024年)
  • web基础
  • 系统架构设计(十五):质量效用树
  • unipp === 状态管理 Pinia 使用
  • Mermaid 使用快速入门
  • MinerU可视化界面程序部署(Windows环境)
  • RSA加解密实战指南:Java与JavaScript实现详解 + 在线工具推荐
  • 探索付费社群的成功之道:生财与群响的深度解析
  • Pandas:Series和DataFrame的概念、常用属性和方法
  • 【漫话机器学习系列】270.KNN算法(K-Nearest Neighbors)
  • 【python进阶知识】Day 31 文件的规范拆分和写法
  • 工业数据治理标准规范深度解析
  • 150.WEB渗透测试-MySQL基础(五)
  • JAVA打飞机游戏设计与实现(论文+源代码)【源码+文档+部署】
  • Splitpanes (可调整大小的面板分割布局)插件应用
  • ALSA 插件是什么? PortAudio 断言失败是什么意思?
  • 12年政企同心共织民生保障网——上海国寿与嘉定区政府创新民生综合保险项目
  • 一箭六星!力箭一号遥七运载火箭发射成功
  • 钟睒睒:不反对代工,但农夫山泉目前所有产品是无法代工的
  • 全国首例闭环脊髓神经接口手术在浙江完成,截瘫患者实现自主行走
  • 4月中国常青游戏榜:32款游戏吸金近34亿元,腾讯、网易占半壁江山,《原神》再跌出前十
  • 又是“9+2”复式票,浦东退休阿姨擒大乐透1153万头奖