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秒 ...
随机推荐
- 两个int的和判断溢出
long a,b; cin>>a>>b; long i; i = a+b; if((i^a)<0 && (i^b)<0) cout<<& ...
- python之路十一
RabbitMQ基本概念RabbitMQ , 是一个使用 erlang 编写的 AMQP (高级消息队列协议) 的服务实现. 简单来说, 就是一个功能强大的消息队列服务.通常我们谈到队列服务, 会有三 ...
- php libevent 扩展使用示例
<?php define()); define()); class epoll{ private static $socket; public static $connections; priv ...
- mysql in
2016年4月13日 17:11:19 星期三 摘抄自<高性能mysql> 在很多数据库中, IN() 完全等同于多个 OR 的连结 MySQL的IN 会先将列表中的数据线进行排序, 然后 ...
- .NET LINQ查询操作中的类型关系
LINQ 查询操作中的类型关系 若要有效编写查询,您应该了解完整的查询操作中的变量类型是如何全部彼此关联的. 如果您了解这些关系,就能够更容易地理解文档中的 LINQ 示例和代码示例. 另外 ...
- [python面向对象]--基础篇
1.#类 #类就是一个模板,模板里可以包含多个函数,函数里实现一些功能 #定义一个类 class bar: def foo(self,agr): print(self,agr) obj = bar() ...
- volatile关键字详解
本文系转载,原文链接:http://www.cnblogs.com/Chase/archive/2010/07/05/1771700.html,如有侵权,请联系我:534624117@qq.com 引 ...
- VS2010+C#+EmguCV 配置详解
在VS2010(VC10)中配置能使用C#开发语言调用Open CV视觉库的方法如下.众所周知,能供C#使用的OpenCV库叫:Emgu CV.注意用C#开发的话,是不需要单独安装OpenCV的,em ...
- 工欲善其事-Eclipse设置
1.注释设置 [重要可以保存使用] 在菜单栏Window--->Preferences--->Java--->Code Style--->Code Templates然后展示C ...
- 【Java EE 学习 16 下】【dbutils的使用方法】
一.为什么要使用dbutils 使用dbutils可以极大程度的简化代码书写,使得开发进度更快,效率更高 二.dbutils下载地址 http://commons.apache.org/proper/ ...