问题描述
在青海某客户计费数据库反应入库很慢,通过查询发现所有的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;
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。