Chinaunix首页 | 论坛 | 博客
  • 博客访问: 3672771
  • 博文数量: 715
  • 博客积分: 1860
  • 博客等级: 上尉
  • 技术积分: 7745
  • 用 户 组: 普通用户
  • 注册时间: 2008-04-07 08:51
个人简介

偶尔有空上来看看

文章分类

全部博文(715)

文章存档

2023年(75)

2022年(134)

2021年(238)

2020年(115)

2019年(11)

2018年(9)

2017年(9)

2016年(17)

2015年(7)

2014年(4)

2013年(1)

2012年(11)

2011年(27)

2010年(35)

2009年(11)

2008年(11)

分类: Oracle

2022-03-26 16:02:04

告警日志中看到这个信息,往往心情一沉

你应当知道的是
通常情况下, row cache enqueue 是一系列事件的一部分,阻塞了申请 row cache enqueue 的进程的进程很可能被另一个进程阻塞。Row cache enqueue 经常是问题的表象。

还应当知道的是:
当达到阈值会引发 "WAITED TOO LONG FOR A ROW CACHE ENQUEUE LOCK!" 这个消息,因此,如果未达到阈值它不会被引发。这意味着,不太严重的问题,即使具有相同的原因,也可以不输出该消息。

概念:
行缓存(Row Cache)或数据字典缓存(Data Dictionary Cache)是保存数据字典信息的共享池的内存区域。row cache 保存数据时并不是以数据块的形式,而是以行的形式。row cache enqueue 锁是在数据字典行的锁。此 enqueue 是关于特定数据字典对象的。这就是所谓的 enqueue 类型,可以在视图 V$rowcache 中找到。

缘由:
当我们试图获得 row cache 锁,这种等待事件将被使用。
当 row cache 冲突发生时,如果不能在一个预定的时间周期内得到 enqueue,将在 USER_DUMP_DEST 或 background_dump_dest 目录下生成一个跟踪文件,这取决于是用户还是后台进程创建的跟踪文件。alert.log 通常会相应的更新警告消息和跟踪文件的位置。
数据库检测到核心资源被持有太久并通知管理员,从而让这种情况可以得到解决。这也可能伴随着数据库挂起或变慢。

首要排查:
SGA 的shrink/resize
定位这种情况的方法是,有很多'SGA: allocation forcing component growth'等待事件,或 AWR 的 TOP 列表有类似等待,以及阻塞等待"WAITED TOO LONG FOR A ROW CACHE ENQUEUE LOCK!" 的会话在等待'SGA: allocation forcing component growth'

或者

  1. ALTER SESSION SET nls_date_format = 'YYYY-MM-DD HH24:MI:SS';
  2. SET PAGESIZE 900
  3. SET LINESIZE 255
  4. COL COMPONENT FORMAT A30
  5. COL INITIAL_SIZE FORMAT A10
  6. COL FINAL_SIZE FORMAT A10
  7. SPOOL asmm_resize.txt
  8. select START_TIME, component, oper_type, oper_mode, initial_size/1024/1024 "INITIAL", FINAL_SIZE/1024/1024 "FINAL", END_TIME
  9. from v$sga_resize_ops
  10. where component in ('DEFAULT buffer cache', 'shared pool')
  11.  and status = 'COMPLETE'
  12. order by start_time, component;
  13. SPOOL OFF

row cache enqueue 类型:
DC_TABLESPACES:最可能的原因是新 extent 的分配
DC_SEQUENCES:序列缓存太少了,现在比较少见了
DC_USERS:用户授权
DC_ROLLBACK_SEGMENTS:由于 rollback 段的分配导致的
DC_AWR_CONTROL:可能是生成awr遇到问题

深入诊断:
当问题发生时,错误会记入 alert.log,并自动产生一个 systemstate dump 文件(多贴心,国产库好好学学),还需要3A报告,19c的库一个awr即可(一键三连了)。


  1. col parameter for a32
  2. col type for a12

  3. select * from (select parameter,cache#,count,gets,GETMISSES from v$rowcache order by GETMISSES desc) where rownum<11

  4. select cache#,parameter,TYPE,SUBORDINATE#,count,round(GETMISSES/GETS*100,1) miss_percent from v$rowcache where cache#=&cache;


示例:



参考:
故障排除:"WAITED TOO LONG FOR A ROW CACHE ENQUEUE LOCK! " (Doc ID 2016422.1)
阅读(1262) | 评论(0) | 转发(0) |
0

上一篇:alert.log 小技巧

下一篇:4031 不要怕

给主人留下些什么吧!~~