program都在等待reliable message

Roger 2019-06-17
10
0 0
摘要:数据库反应入库很慢,通过查询发现所有的program都在等待reliable message。

问题描述

在青海某客户计费数据库反应入库很慢,通过查询发现所有的program都在等待reliable message。 对于该等待事件几年前遇到过。通过如下脚本很容易判断产生该等待事件的channel是什么:

SELECT c.usernane,
       c.sid,
       c.program,
       c.sql_id,
       b.addr "Channel context",
       b.totpub_ksrcctx,
       a.name_ksrcdes
  FROM X$KSRCDES a, X$KSRCCTX b, v$session c
 WHERE b.name_ksrcctx = a.indx
   AND b.addr = c.p1raw
   and c.event='reliable message'


专家解答

通过查询发现均为Result Cache:channel ;由此可见跟11gR2引入的Result cache新特性有关;但是询问客户之后,发现业务sql并没有使用/*+result_cache */之类的hint。

那么为什么会产生这个问题呢? 通过模糊查询v$sqlarea/v$session发现 oracle在对table进行统计信息动态采样;而动态采样的sql语句中使用来诸如result_cache(snapshot=360)之类的hint。经查发现这是12c针对动态采样的增强,通过调整如下的几个参数可以屏蔽该问题:

alter system set "_optimizer_dsdir_usage_control"=0	  	  sid ='*' scope=both;     
alter system set "_sql_plan_directive_mgmt_control"=0	  sid ='*' scope=both; 
alter system set "_optimizer_ads_use_result_cache" = FALSE  sid ='*' scope=both;


「喜欢文章,快来给作者赞赏墨值吧」

评论

0
0
Oracle
订阅
欢迎订阅Oracle频道,订阅之后可以获取最新资讯和更新通知。
墨值排行
今日本周综合
热门文章
近期活动
全部
相关课程
全部