当前位置: 首页 > 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等待事件的发生。

http://www.xdnf.cn/news/554419.html

相关文章:

  • java接口自动化初识
  • 保证数据库 + redis在读写分离场景中事务的一致性
  • 985,成立人工智能学院
  • Java高频面试之并发编程-19
  • 第50天-使用Python+Qt+DeepSeek开发AI运势测算
  • 基于springboot3 VUE3 火车订票系统前后端分离项目适合新手学习的项目包含 智能客服 换乘算法
  • 当前主流的传输技术(如OTN、IP-RAN、FlexE等)
  • C++STL之string
  • 产业互联网+三融战略:重构企业增长密码
  • 人工智能+:职业技能培训的元命题与能力重构
  • Linux 正则表达式 扩展正则表达式 gawk
  • 101个α因子#8
  • Java DTO 深度解析
  • JUC编程monitor、锁膨胀以及相关关键字
  • 定时从接口下载数据到本地
  • 免费插件集-illustrator插件-Ai插件-路径尖角圆角化
  • 天然产物在食品医药美妆领域的创新应用研究
  • 图像噪声模拟
  • 安装PostgreSQL
  • 解决javafx组件缺失导致运行程序报错的问题
  • Spring Boot中的分布式缓存方案
  • PID项目---硬件设计
  • Javascript 编程基础(2)基础知识 | 2.3、语法规则
  • 操作系统----软考中级软件工程师(自用学习笔记)
  • 循环神经网络
  • 机器人编程基础---C语言中的高级特性
  • upload-labs通关笔记-第13关 文件上传之白名单POST法
  • 旧物回收系统:撬动绿色经济新支点,开启循环未来新篇章
  • 区县与地级市和省会的距离
  • LW-CTrans:一种用于三维医学图像分割的轻量级CNN与Transformer混合网络|文献速递-深度学习医疗AI最新文献