[20160104]enq RC-Result Cache Contention

[20160104]enq RC - Result Cache Contention.txt

--今天检查awr报表,无意间发现enq RC - Result Cache Contention排在靠前的位置。我们服务器很强劲,出现这个给仔细检查。

1.环境:
SYSTEM@AAA.AAA.AA.AAA:1521/XXXX> @ &r/ver1
PORT_STRING                    VERSION        BANNER
------------------------------ -------------- --------------------------------------------------------------------------------
x86_64/Linux 2.4.xx            11.2.0.4.0     Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production

2.分析:
SELECT sql_id, COUNT (*)
    FROM DBA_HIST_ACTIVE_SESS_HISTORY
   WHERE event = 'enq: RC - Result Cache: Contention'
GROUP BY sql_id;

SQL_ID          COUNT(*)
------------- ----------
5wh51638vh3jc          1
futfjyqv0c6b8         28

--很明显问题集中在sql_id='futfjyqv0c6b8'.

SYSTEM@AAA.AAA.AA.AAA:1521/XXXX> @ &r/sqlid futfjyqv0c6b8
SQL_ID        SQLTEXT
------------- --------------------------------------------------------------------------------------------------------------------------------------------------------
futfjyqv0c6b8 select emr_zlsqmx.mxid,emr_zlsqmx.sqdh,emr_zlsqmx.zlxmid,emr_zlsqmx.xmmc,emr_zlsqmx.xmlb,emr_zlsqmx.sypc,emr_zlsqmx.sysl,emr_zlsqmx.plsx,emr_zlsqmx.ysy
              zbh,emr_zlsqmx.yszt  from emr_zlsqmx

--可以发现很简单访问就是表emr_zlsqmx。而且这张表是我节前修改result cache模式的。

SYSTEM@AAA.AAA.AA.AAA:1521/XXXX> select segment_name,SEGMENT_TYPE,SEGMENT_SUBTYPE,BYTES,BLOCKS,EXTENTS from dba_segments where segment_name='EMR_ZLSQMX';
SEGMENT_NAME         SEGMENT_TYPE       SEGMENT_SU      BYTES     BLOCKS    EXTENTS
-------------------- ------------------ ---------- ---------- ---------- ----------
EMR_ZLSQMX           TABLE              ASSM         17825792       2176         32

--大小17825792/1024/1024=17M。

SYSTEM@AAA.AAA.AA.AAA:1521/XXXX> @ &r/ddl BBBBBB_BBB.EMR_ZLSQMX
C100
------------------------------------------------------------------------------
  CREATE TABLE "BBBBBB_BBB"."EMR_ZLSQMX"
   (    "MXID" NUMBER(18,0) NOT NULL ENABLE,
        "SQDH" NUMBER(18,0) NOT NULL ENABLE,
        "ZLXMID" NUMBER(8,0) NOT NULL ENABLE,
        "XMMC" VARCHAR2(255) NOT NULL ENABLE,
        "XMLB" NUMBER(1,0) NOT NULL ENABLE,
        "SYPC" VARCHAR2(6),
        "SYSL" NUMBER(5,2),
        "PLSX" NUMBER(3,0),
        "YSYZBH" NUMBER(18,0),
        "YSZT" VARCHAR2(120),
         CONSTRAINT "PK_EMR_ZLSQMX" PRIMARY KEY ("MXID")
  USING INDEX PCTFREE 10 INITRANS 2 MAXTRANS 255 COMPUTE STATISTICS
  STORAGE(INITIAL 196608 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
  PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1
  BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT)
  TABLESPACE "BBBBBB_BBB"  ENABLE,
         SUPPLEMENTAL LOG GROUP "GGS_87299" ("MXID") ALWAYS
   ) SEGMENT CREATION IMMEDIATE
  PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255
NOCOMPRESS LOGGING
  STORAGE(INITIAL 589824 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
  PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1
  BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT)
  TABLESPACE "BBBBBB_BBB"
  RESULT_CACHE(MODE FORCE) ;

SYSTEM@AAA.AAA.AA.AAA:1521/XXXX> select * from DBA_TAB_MODIFICATIONS where table_name='EMR_ZLSQMX';
TABLE_OWNER  TABLE_NAME SUBPARTITION_NAME  INSERTS    UPDATES    DELETES TIMESTAMP           TRU DROP_SEGMENTS
------------ ---------- ------------------ ------- ---------- ---------- ------------------- --- -------------
BBBBBB_BBB   EMR_ZLSQMX                       4730        148         13 2016-01-03 17:11:45 NO              0

--奇怪这个是应用的字典表,估计这段时间用户在维护这张表吗?

SELECT sql_id,count(*)
  FROM V$ACTIVE_SESSION_HISTORY
WHERE event = 'enq: RC - Result Cache: Contention'
group by sql_id

SQL_ID          COUNT(*)
------------- ----------
g7ytdh9mxt1s0          2
futfjyqv0c6b8         46

--会不会显示这个的结果集太大,导致的问题。我在sqlplus设置
set autot traceonly
set timing on
--大约执行10次会出现1次存在consistent gets的情况。

SYSTEM@AAA.AAA.AA.AAA:1521/XXXX> select * from DBA_TAB_MODIFICATIONS where table_name='EMR_ZLSQMX';

TABLE_OWNER  TABLE_NAME PARTITION_NAME  SUBPARTITION_NAME     INSERTS    UPDATES    DELETES TIMESTAMP           TRU DROP_SEGMENTS
------------ ---------- --------------- ------------------ ---------- ---------- ---------- ------------------- --- -------------
BBBBBB_BBB   EMR_ZLSQMX                                          4730        148         13 2016-01-03 17:11:45 NO              0

SYSTEM@AAA.AAA.AA.AAA:1521/XXXX> exec sys.DBMS_STATS.FLUSH_DATABASE_MONITORING_INFO()
PL/SQL procedure successfully completed.

SYSTEM@AAA.AAA.AA.AAA:1521/XXXX> select * from DBA_TAB_MODIFICATIONS where table_name='EMR_ZLSQMX';
TABLE_OWNER  TABLE_NAME PARTITION_NAME  SUBPARTITION_NAME     INSERTS    UPDATES    DELETES TIMESTAMP           TRU DROP_SEGMENTS
------------ ---------- --------------- ------------------ ---------- ---------- ---------- ------------------- --- -------------
BBBBBB_BBB   EMR_ZLSQMX                                          6298        197         15 2016-01-04 15:27:28 NO              0

--很明显这个表存在"大量"的DML操作。

SYSTEM@AAA.AAA.AA.AAA:1521/XXXX> SELECT id,TYPE,status,NAME,object_no,cache_id,invalidations,scn FROM v$result_cache_objects where INVALIDATIONS>=1000;
        ID TYPE         STATUS    NAME                   OBJECT_NO CACHE_ID               INVALIDATIONS           SCN
---------- ------------ --------- --------------------- ---------- ---------------------- ------------- -------------
    129667 Dependency   Published BBBBBB_BBB.EMR_ZLSQMX      93765 BBBBBB_BBB.EMR_ZLSQMX           3817   14406729743
    336708 Dependency   Published BBBBBB_BBB.YF_DB01         96396 BBBBBB_BBB.YF_DB01             25145   14406725573
     39171 Dependency   Published BBBBBB_BBB.GY_XTCS         94089 BBBBBB_BBB.GY_XTCS            397620   14406731157
     39283 Dependency   Published BBBBBB_BBB.GY_YHCS         94111 BBBBBB_BBB.GY_YHCS            660917   14406730951
         3 Dependency   Published BBBBBB_BBB.GY_YGDM         94105 BBBBBB_BBB.GY_YGDM              5378   14406354949

--这条语句本来不存在优化的可能性。而且查询有关Result Cache的等待事件都是围绕这条语句。先取消RESULT_CACHE的设置。

SYSTEM@AAA.AAA.AA.AAA:1521/XXXX> ALTER TABLE BBBBBB_BBB.EMR_ZLSQMX RESULT_CACHE (MODE DEFAULT);
Table altered.

--昏,仔细检查这个表不是应用的字典表,叫"治疗申请单_单据分类明细项目",没有谓词条件,这样不是越查越慢吗?对于这样的开发真
--的很无语。

SYSTEM@AAA.AAA.AA.AAA:1521/XXXX> select * from DBA_TAB_MODIFICATIONS where table_name='EMR_ZLSQMX';

TABLE_OWNER  TABLE_NAME PARTITION_NAME  SUBPARTITION_NAME     INSERTS    UPDATES    DELETES TIMESTAMP           TRU DROP_SEGMENTS
------------ ---------- --------------- ------------------ ---------- ---------- ---------- ------------------- --- -------------
BBBBBB_BBB   EMR_ZLSQMX                                          6298        197         15 2016-01-04 15:27:28 NO              0

SYSTEM@AAA.AAA.AA.AAA:1521/XXXX> exec sys.DBMS_STATS.FLUSH_DATABASE_MONITORING_INFO()

PL/SQL procedure successfully completed.

SYSTEM@AAA.AAA.AA.AAA:1521/XXXX> select * from DBA_TAB_MODIFICATIONS where table_name='EMR_ZLSQMX';
TABLE_OWNER  TABLE_NAME PARTITION_NAME  SUBPARTITION_NAME     INSERTS    UPDATES    DELETES TIMESTAMP           TRU DROP_SEGMENTS
------------ ---------- --------------- ------------------ ---------- ---------- ---------- ------------------- --- -------------
BBBBBB_BBB   EMR_ZLSQMX                                          6317        198         15 2016-01-04 15:35:11 NO              0

时间: 2024-07-30 10:52:40

[20160104]enq RC-Result Cache Contention的相关文章

oralce 12.1中出现大量Result Cache: RC Latch处理

昨天有个朋友找到我说他们的12.1的库在业务高峰期非常慢,希望我们给予优化支持,经过awr分析,定位到问题为latch free问题,具体定位为:Result Cache: RC Latch.优化之前awr部分信息 awr整体负载情况,证明当前这个库已经比较忙,业务反馈很慢 addr信息和top wait信息,确定是latch free问题比较突出 latch信息统计和ash信息,找出来突出的latch,定位为Result Cache: RC Latch引起该问题 补充大量异常sql 类似sql

Oracle结果集缓存(Result Cache)--服务器、客户端、函数缓存

Oracle结果集缓存(Result Cache)--服务器.客户端.函数缓存 在11g中,Oracle提供了结果集缓存特性.该缓存是在共享内存中存储全部的结果集,如果一个查询SQL被执行,且它对应的结果集在缓存中,那么,该SQL的几乎全部开销都可以避免.这些开销包括,解析时间.逻辑读.物理读和任意的通常可能会遭遇的争用.但是,在实际的情况中,结果集缓存仅在少数的情况下是有效的,原因有如下几点: (1)有数据重叠的多个SQL会在缓存中保存冗余的数据. (2)对依赖对象的任何改变(包括对查询中引用

ORACLE等待事件:enq: TX - row lock contention

enq: TX - row lock contention等待事件,这个是数据库里面一个比较常见的等待事件.enq是enqueue的缩写,它是一种保护共享资源的锁定机制,一个排队机制,先进先出(FIFO).enq: TX - row lock contention等待事件,OACLE将其归类为application级别的等待事件.有些场景是因为应用逻辑设计不合理造成的.下面我们看看enq: TX - row lock contention的英文介绍: This wait indicates ti

【故障处理】队列等待之enq: TX - row lock contention

[故障处理]队列等待之enq: TX - row lock contention 1  BLOG文档结构图   2  前言部分 2.1  导读和注意事项 各位技术爱好者,看完本文后,你可以掌握如下的技能,也可以学到一些其它你所不知道的知识,~O(∩_∩)O~: ① enq: TX - row lock contention等待事件的解决 ② 一般等待事件的解决办法 ③ 队列等待的基本知识 ④ ADDM的使用 ⑤ 如何获取历史执行计划 ⑥ 查询绑定变量的具体值 ⑦ 很多有用的查询性能的SQL语句

ORACLE 归档空间满导致的enq: TX - row lock contention

  2016年10月10日,客户一预警系统发生会话数飙高,系统响应极慢,后来确诊根源是归档空间满,引起所有redo耗尽,导致会话堆积,下面是处理过程.  操作系统:HP-UX B.11.31 U ia64  数据库版本:ORACLE 10.2.0.5 RAC  按照常规处理思路,首先查看RAC数据库的告警日志:  实例1的告警日志 Mon Oct 10 19:24:48 EAT 2016 ORACLE Instance orcl1 - Can not allocate log, archival

【11gR2新特性】result cache 的三种模式

yang@rac1>show parameter result NAME                                 TYPE        VALUE ------------------------------------ ----------- ------- client_result_cache_lag              big integer 3000 client_result_cache_size             big integer 0 r

ORACLE AWR结合ASH诊断分析enq: TX - row lock contention

  公司用户反馈一系统在14:00~15:00(2016-08-16)这个时间段反应比较慢,于是生成了这个时间段的AWR报告,   如上所示,通过Elapsed Time和DB Time对比分析,可以看出在这段时间内服务器并不繁忙.分析Top 5 Timed Events,我们可以看到前五的等待事件     可以看到等待事件enq: TX - row lock contention占了所有等待事件17.3%的比例,猜测有可能是锁等待(enqueue等待)引起的阻塞导致,但是这个还不能下定论,因为

[20150924]result cache problem.txt

[20150924]result cache problem.txt --昨天看了连接,看到一个关于result cache的例子,重复测试看看: --链接 https://jonathanlewis.wordpress.com/2015/09/22/result-cache/ 1.环境: SCOTT@test> @ver1 PORT_STRING                    VERSION        BANNER ------------------------------ --

[20160919]Result cache问题.txt

[20160919]Result cache问题.txt --看了链接http://blog.dbi-services.com/result-cache-side-effects-on-number-of-calls/,重复测试: SCOTT@book> @ &r/ver1 PORT_STRING                    VERSION        BANNER ------------------------------ -------------- -----------