数据库环境为12.1.0.2.180417
客户反应12c pdb运行缓慢,cdb中latch free等待事件过高(在cdb中可以看到latch free,pdb中看不到)
SQL> SQL> 2 3 4 5 INST_ID EVENT STATE COUNT(1)
---------- ---------------------------------------- ------------------- ----------
1 latch free WAITING 274
1 cursor: pin S wait on X WAITING 34
1 enq: TX - row lock contention WAITING 20
1 library cache lock WAITING 8
1 latch free WAITED KNOWN TIME 2
1 latch free WAITED SHORT TIME 2
1 SQL*Net message to client WAITED SHORT TIME 2
1 reliable message WAITING 2
1 latch: shared pool WAITED SHORT TIME 1
1 SQL*Net more data from client WAITED SHORT TIME 1
3 reliable message WAITING 1
2 reliable message WAITING 1
通过查看latch id找到latch name(latch id为p2)
SQL> select p2,count(1) from v$session a where a.event='latch free' group by p2 order by 2 desc;
P2 COUNT(1)
---------- ----------
559 185
30 1
SQL> /
P2 COUNT(1)
---------- ----------
559 200
SQL> /
P2 COUNT(1)
---------- ----------
559 202
SQL> select * from v$latchname where latch#=559;
LATCH# NAME DISPLAY_NAME D
---------- ---------------------------------------------------------------- -----------------------------------------------------------------
559 Result Cache: RC Latch Result Cache: RC Latch 0
result cache特效处于开启状态
SQL> show parameter result
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
_optimizer_ads_use_result_cache boolean FALSE
client_result_cache_lag big integer 3000
client_result_cache_size big integer 0
result_cache_max_result integer 5
result_cache_max_size big integer 188768K
result_cache_mode string MANUAL
result_cache_remote_expiration integer 0
查询到相关BUG 22911454
在库中查看/*+ RESULT_CACHE (SYSOBJ=TRUE SHELFLIFE=30)的类似sql
SELECT /*+ RESULT_CACHE (SYSOBJ=TRUE SHELFLIFE=30) */ OBJ#,AFFINITY FROM "SYS"."SCHEDULER$_CLASS" "SCHEDULER$_CLASS" WHERE 1=1
71s5km0f48aw5
SELECT /*+ RESULT_CACHE (SYSOBJ=TRUE SHELFLIFE=30) */ OBJ#,AFFINITY FROM "SYS"."SCHEDULER$_CLASS" "SCHEDULER$_CLASS" WHERE 1=1
71s5km0f48aw5
SELECT /*+ RESULT_CACHE (SYSOBJ=TRUE SHELFLIFE=30) */ OBJ#,AFFINITY FROM "SYS"."SCHEDULER$_CLASS" "SCHEDULER$_CLASS" WHERE 1=1
71s5km0f48aw5
SELECT /*+ RESULT_CACHE (SYSOBJ=TRUE SHELFLIFE=30) */ OBJ#,AFFINITY FROM "SYS"."SCHEDULER$_CLASS" "SCHEDULER$_CLASS" WHERE 1=1
71s5km0f48aw5
SELECT /*+ RESULT_CACHE (SYSOBJ=TRUE SHELFLIFE=30) */ OBJ#,NEXT_START_DATE,DURATION,FLAGS FROM "SYS"."SCHEDULER$_WINDOW" "SCHEDULER$_WINDOW"1
f7kq0zhxa0dk9
SELECT /*+ RESULT_CACHE (SYSOBJ=TRUE SHELFLIFE=30) */ OBJ#,NEXT_START_DATE,DURATION,FLAGS FROM "SYS"."SCHEDULER$_WINDOW" "SCHEDULER$_WINDOW"1
f7kq0zhxa0dk9
SELECT /*+ RESULT_CACHE (SYSOBJ=TRUE SHELFLIFE=30) */ OBJ#,NEXT_START_DATE,DURATION,FLAGS FROM "SYS"."SCHEDULER$_WINDOW" "SCHEDULER$_WINDOW"1
f7kq0zhxa0dk9
SELECT /*+ RESULT_CACHE (SYSOBJ=TRUE SHELFLIFE=30) */ OBJ#,NEXT_START_DATE,DURATION,FLAGS FROM "SYS"."SCHEDULER$_WINDOW" "SCHEDULER$_WINDOW"1
结论:
该库为12.1,cdb中有较高的Result Cache: RC Latch
,result cache处于打开状态,且sql中包含了“/*+ RESULT_CACHE (SYSOBJ=TRUE SHELFLIFE=30) */”字样,基本可以确定当时该库触发了BUG 22911454
虽然打过180417的补丁,但是还是触发了bug,该补丁已发布,而且有基于180417平台的补丁。
解决办法:
1.打包含或针对该BUG的补丁
2.关闭result cache特效
参考命令:
alter system set result_cache_max_size=0 scope=both sid=‘*’;