> 历史信息查看请查看个人网页www.zhaibibei.cn > 这是一个坚持Oracle,Python原创内容的公众号,欢迎关注 ------ 这个专题讲一些日常运维的异常处理 今天讲一个latch free 等待事件的处理过程 ------- [TOC] ##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 ``` [image:236 size:orig] 这里找出来一条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 ``` [image:237 size:orig] 查下来一看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这个导致 [image:238 size:orig] ------- 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 [image:239 size:orig] 但是我们的没有使用hint,猜测可能Oracle认为查询的结果有很多的值而导致使用direct load方式 这时我在asktom上咨询了下,他们认为是bug ,需要升级,链接见最后 -------- ##3. 问题解决 ### 3.1 临时方案 升级临时是不可能的,我先刷新了下shared_pool ``` alter system flush shared_pool; ``` ### 3.2 修改应用 我查询上面insert语句的的查询结果为0,就叫应用人员修改看是否可以现行查询然后进行insert 至此问题解决,最后还是建议能升级的数据库就升级啦~ ------ ##4.参考链接 [Direct-Load INSERT](https://docs.oracle.com/cd/A58617_01/server.804/a58227/ch_dlins.htm) [INST_DRTLD_MISMATCH cause version count very high](https://asktom.oracle.com/pls/apex/f?p=100:11:::NO::P11_QUESTION_ID:9538579900346487453) [https://docs.oracle.com/cd/E18283_01/server.112/e17110/dynviews_3059.htm](https://docs.oracle.com/cd/E18283_01/server.112/e17110/dynviews_3059.htm) --------