oracle TBL$OR$IDX$PART$NUM BUG案例处理过程



通过AWR报告发现数据库cpu告警的问题,定位产生问题的sql语句
首先查看SQL的执行计划
SELECT count(1)
FROM cmds.psn_cntr_holder a
,cmds.pol_attrib c
,cmds.std_contract b
INNER JOIN cmds.CUSTOMINFO_E_SINGLE_CNTR k ON k.cntr_no = b.cntr_no
AND k.e_flag = 'Y'
AND k.branch_src = b.branch_src
AND b.sys_src IN (
'NBPS'
,'OBPS'
)
WHERE 1 = 1
AND (
1 = 0
OR a.hldr_cust_no = '2004140804000044007' AND a.branch_src = '140000' AND a.sys_src = 'CBPS8'
OR a.hldr_cust_no = '2004140804000044007' AND a.branch_src = '000002' AND a.sys_src = 'UBPS'
)
AND a.cntr_id = b.cntr_id
AND b.pol_code = c.pol_cbps_code
AND b.cntr_stat IN ('K')
AND c.pol_term_code = 'L'
AND b.sys_src IN (
SELECT syssrc
FROM cmds.paramSystem p
WHERE 1 = 1
AND p.orisys = 'ECSS'
);
执行计划没有问题
--------------------------------------------------------------------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time | Pstart| Pstop |
--------------------------------------------------------------------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 1 | 169 | 71 (0)| 00:00:01 | | |
| 1 | SORT AGGREGATE | | 1 | 169 | | | | |
|* 2 | HASH JOIN SEMI | | 1 | 169 | 71 (0)| 00:00:01 | | |
| 3 | NESTED LOOPS | | 1 | 155 | 68 (0)| 00:00:01 | | |
| 4 | NESTED LOOPS | | 2 | 155 | 68 (0)| 00:00:01 | | |
| 5 | NESTED LOOPS | | 1 | 148 | 64 (0)| 00:00:01 | | |
| 6 | MERGE JOIN CARTESIAN | | 1 | 85 | 60 (0)| 00:00:01 | | |
| 7 | INLIST ITERATOR | | | | | | | |
|* 8 | TABLE ACCESS BY GLOBAL INDEX ROWID| PSN_CNTR_HOLDER | 1 | 53 | 6 (0)| 00:00:01 | ROWID | ROWID |
|* 9 | INDEX RANGE SCAN | IDX_PSN_CNTR_HOLDERNO | 3 | | 4 (0)| 00:00:01 | | |
| 10 | BUFFER SORT | | 67 | 2144 | 54 (0)| 00:00:01 | | |
| 11 | PARTITION RANGE ALL | | 67 | 2144 | 54 (0)| 00:00:01 | 1 | 35 |
| 12 | PARTITION LIST ALL | | 67 | 2144 | 54 (0)| 00:00:01 | 1 | 2 |
|* 13 | TABLE ACCESS FULL | CUSTOMINFO_E_SINGLE_CNTR | 67 | 2144 | 54 (0)| 00:00:01 | 1 | 70 |
|* 14 | TABLE ACCESS BY GLOBAL INDEX ROWID | STD_CONTRACT | 1 | 63 | 4 (0)| 00:00:01 | ROWID | ROWID |
|* 15 | INDEX RANGE SCAN | IDX_STD_CONTACT_CNTRID | 1 | | 3 (0)| 00:00:01 | | |
|* 16 | INDEX RANGE SCAN | POL_ATTRIB_CBPS_CODE | 2 | | 1 (0)| 00:00:01 | | |
|* 17 | TABLE ACCESS BY INDEX ROWID | POL_ATTRIB | 1 | 7 | 4 (0)| 00:00:01 | | |
|* 18 | TABLE ACCESS FULL | PARAMSYSTEM | 2 | 28 | 3 (0)| 00:00:01 | | |
--------------------------------------------------------------------------------------------------------------------------------------
检查下面的SQL的执行的session,因为比较奇怪,所以看看是谁执行的
SELECT DISTINCT TBL$OR$IDX$PART$NUM("STD_CONTRACT", 0, 2, 0, "SYS_SRC")
FROM (
SELECT "P"."SYSSRC" "SYS_SRC"
FROM "PARAMSYSTEM" "P"
WHERE "P"."ORISYS" = 'ECSS'
AND (
"P"."SYSSRC" = 'NBPS'
OR "P"."SYSSRC" = 'OBPS'
)
)
ORDER BY 1
无论是在当前的session视图还是历史的session视图都查不到这个sql的任何信息,定位sql里面的TBL$OR$IDX$PART$NUM 函数,oracle通过TBL$OR$IDX$PART$NUM函数来判断是否普通表满足分区置换的条件。
检查第一个sql的内容,发现INNER JOIN 部分存在一定的问题,建议开发调整该部分
INNER JOIN cmds.CUSTOMINFO_E_SINGLE_CNTR k ON k.cntr_no = b.cntr_no
AND k.e_flag = 'Y'
AND k.branch_src = b.branch_src
AND b.sys_src IN (
'NBPS'
,'OBPS'
)
再看看sql的统计信息

可以看出,该sql返回一样产生的逻辑读非常高,不合理,但是sql从10046时间里面看,使用的执行计划是正确的,跟估算的是一样的。
这时猜测应该是触发了ORACLE bug,该sql引起了oracle内部非常高频率的反复运行分区置换条件的判断。
在oracle support里面确定BUG编号为:17572606
BUG处理方式:
_subquery_pruning_enabled=FALSE on a session or system level. OR use the no_subquery_pruning hint on the problematic queries.
It's a table-level hint so it would be "/*+ no_subquery_pruning(t1) ..
OR
Apply Patch 19889960 if available for your version and platform.
oracle TBL$OR$IDX$PART$NUM BUG案例处理过程的更多相关文章
- FIREDAC(DELPHI10 or 10.1)提交数据给ORACLE数据库的一个不是BUG的BUG
发现FIREDAC(DELPHI10 or 10.1)提交数据给ORACLE数据库的一个不是BUG的BUG,提交的表名大小写是敏感的. 只要有一个表名字母的大小写不匹配,ORACLE就会认为是一个不认 ...
- Oracle之 dmp导入/导出、数据库操作等过程中的字符集问题
影响Oracle数据库字符集最重要的参数是NLS_LANG参数. 它的格式如下: NLS_LANG = language_territory.charset 它有三个组成部分(语言.地域和字符集),每 ...
- android一个下拉放大库bug的解决过程及思考
android一个下拉放大库bug的解决过程及思考 起因 项目中要做一个下拉缩放图片的效果,搜索了下github上面,找到了两个方案. https://github.com/Frank-Zhu/Pul ...
- Bug,项目过程中的重要数据
作者|孙敏 为什么要做Bug分析? Bug是项目过程中的一个有价值的虫子,它不只是给开发的,而是开给整个项目组的. 通过Bug我们能获得什么? 积累测试方法,增强QA的测试能力,提升产品质量 发现项目 ...
- Bug(案例)图片的垂直出现隐藏
这个案例是一个出Bug的案例,很抱歉本人没有找到bug在哪,但是功能却实现了. <!DOCTYPE html> <html> <head> <meta cha ...
- Oracle 11gR2 RAC的两个bug
Oracle 11.2.0.2 bug还是不少的.很多库迁到Oracle 11.2.0.2后都遇到了问题.现在正在跟的两个Oracle 11.2.0.2上的问题:1.ORA-00600: inte ...
- 深入浅出Oracle:DBA入门、进阶与诊断案例(读书笔记1)
一.数据库的启动和关闭 Oracle Server共有2部分组成:Instance和Database. Instance是指一组后台进程/线程和一块共享内存区域,而Database是指存储在磁盘上的一 ...
- ORACLE调整SGA_TARGET值耗费时间长案例
在一数据库版本为(标准版)Oracle Database 10g Release 10.2.0.4.0 - 64bit Production 的服务器上调整 sga_target时,遇到命令执行了非常 ...
- 一个bug案例分析
Bug描述: 某大型系统的一个提供基础数据服务的子系统A进行了一次升级.升级的内容为:优化了失败重传功能,在优化的同时,开发人员发现传输数据的时间戳精度只是精确到了秒,于是顺手把精度改成了1/100秒 ...
随机推荐
- struts标签内容截取
<%@ taglib prefix="tiles" uri="http://tiles.apache.org/tags-tiles"%> <% ...
- iOS如何跳到系统设置里的各种设置界面
最近项目需要授权时候跳转到相关的设置页面,自己总结了一下,想写到简书上来,和大家分享一下. 在本人测试后,iOS8和9都没有问题,直接跳转到各个页面,这可能苹果对这方面开放了吧.第一步修改plist文 ...
- (原)android补间动画(四)之插补器Interpolator
比如说一段旋转动画 RotateAnimation animation = new RotateAnimation(0, 360, mMoveCircle.getMeasuredWidth() / 2 ...
- java高cup占用解决方案
项目中发现java cpu占用高达百分之四百,查看代码发现有一个线程在空转,拉高了cup while(true){ } 解决方案,循环中加入延迟:Thread.sleep(Time): 总结下排查CP ...
- Python函数讲解
Python函数
- angularjs向后台传参,后台收不到数据
angularjs中封装了一个$http服务,用来请求远程资源 参见:HTTP API 其中封装过的$http.post和$http.get使用起来比较方便 后台是php,用$_POST['name' ...
- 【转】Android Studio系列教程六--Gradle多渠道打包
原文链接:http://stormzhang.com/devtools/2015/01/15/android-studio-tutorial6/ 由于国内Android市场众多渠道,为了统计每个渠道的 ...
- 初学Redis(1)——认识Redis
Redis官网对Redis的定义是:“Redis is an open source, BSD licensed, advanced key-value cache and store”,可以看出,R ...
- linux连接远程桌面
#!/usr/bin/env python3 #-*-encoding:utf-8-*- import re import os import urllib.request, urllib.parse ...
- Android adapter适配器的学习
学习Android有一点时间,说说自己的学习感悟. 首先呢,先说说适配器的作用,顾名思义,它就是把数据定义好一定的规则,使得我们可以用到ListView GridView等上面 所以说这玩意,还是得好 ...