[Oracle故障处理]记一次INST_DRTLD_MISMATCH导致的version count过多的问题
这个专题讲一些日常运维的异常处理
今天讲一个latch free 等待事件的处理过程
1. 现象
今天查看公司一台9i数据库的性能,发现latch free等待事件
2. 原因查找
看到latch free ,想到可能是共享池的问题,一般可能是硬解析过多导致冲突
2.1 检查执行次数为1的语句
我们首先查找shared pool中 执行次数等于1的语句
select substr (sql_text,0, 40), count (*),max(module)
from v$sql
where executions = 1
group by substr (sql_text,0, 40)
order by count (*) desc
这里找出来一条insert 语句有2.5W的条目
2.2 检查未使用绑定变量的语句
select sql_text, hash_value, module , first_load_time, last_load_time
from v$sql
where sql_text like 'INSERT INTO FWCATNS_STG_SWIN@DEVFWCP (C%' order by last_load_time desc
查下来一看hash_value的值是一样的,说明不是绑定变量的问题,而是version count过多,而且是五分钟一次,接下来我们来分析原因
2.3 查看version count 过多原因
我们通过如下语句找出未复用的原因
select * from v$sqlarea where hash_value=2347964182;
select * from v$sql_shared_cursor where kglhdpar = 'C0000001D25F7518' ;
发现是由于INST_DRTLD_MISMATCH这个导致
PS:10g及以上使用如下语句查询
select * from v$sql_shared_cursor where address = '0000000386BC2E58'
2.4 分析INST_DRTLD_MISMATCH
这个栏位官方的解释为:
Insert direct load does not match the existing child cursor
是由于insert 使用了direct load导致的,但是我上面的语句并没有append的hint呀,这怎么回事儿呢
这时经过搜索direct load,发现:
Direct-load INSERT (serial or parallel) 只支持INSERT ... SELECT 语法
和上面的语句语法相同
使用它需要加APPNED HINT
但是我们的没有使用hint,猜测可能Oracle认为查询的结果有很多的值而导致使用direct load方式
这时我在asktom上咨询了下,他们认为是bug ,需要升级,链接见最后
3. 问题解决
3.1 临时方案
升级临时是不可能的,我先刷新了下shared_pool
alter system flush shared_pool;
3.2 修改应用
我查询上面insert语句的的查询结果为0,就叫应用人员修改看是否可以现行查询然后进行insert
至此问题解决,最后还是建议能升级的数据库就升级啦~
4.参考链接
INST_DRTLD_MISMATCH cause version count very high
https://docs.oracle.com/cd/E18283_01/server.112/e17110/dynviews_3059.htm
- 根据前后的子串求中间串的函数
- Centos6下zookeeper集群部署记录
- 抓取百度指数引发的图像数字识别
- 真正将标注文字遮盖的方法
- “AS3.0高级动画编程”学习:第四章 寻路(AStar/A星/A*)算法 (中)
- li浮动时ul高度为0,解决ul自适应高度的几种方法
- 使用正则表达式求完整路径中的文件名
- “AS3.0高级动画编程”学习:第四章 寻路(AStar/A星/A*)算法 (下)
- Centos下SFTP双机高可用环境部署记录
- as3:Function以及call,apply
- centos6下redis cluster集群部署过程
- centos6下ActiveMQ+Zookeeper消息中间件集群部署记录
- 发布一个轻量级的滑块控件
- as3:sprite作为容器使用时,最好不要指定width,height
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 为什么大家都说“SELECT *”效率低?
- 手把手教你如何搭建一套GPS定位系统平台
- [较难]LeetCode-4.寻找两个正序数组的中位数 利用数组扩充和二分法切割思想实现
- Go Errors 错误处理
- MySQL数据库备份实操
- spring-cloud-config:配置同步原理
- Newbe.Claptrap 框架入门,第二步 —— 简单业务,清空购物车
- 来自前端同学对后端童鞋的吐槽!@!#^$%
- Linux ADF(Atomic Display Framework)浅析---概述
- Swift进阶二:基本数据类型相关
- 控制反转与依赖注入
- 每日两题 T16
- 每日两题 T13
- 每日两题 T21
- 每日两题 T4