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秒 ...
随机推荐
- Linux上进行单片机开发
linux上可以使用sdcc进行单片机开发 ubuntu使用 apt-get install sdcc 即可安装. 附一个比较通用的Makefile PRJ := test SRC := $(wild ...
- [BZOJ3173][Tjoi2013]最长上升子序列
[BZOJ3173][Tjoi2013]最长上升子序列 试题描述 给定一个序列,初始为空.现在我们将1到N的数字插入到序列中,每次将一个数字插入到一个特定的位置.每插入一个数字,我们都想知道此时最长上 ...
- CentOS防火墙iptables的配置方法详解
CentOS系统也是基于linux中的它的防火墙其实就是iptables了,下面我来介绍在CentOS防火墙iptables的配置教程,希望此教程对各位朋友会有所帮助. iptables是与Linux ...
- screen 常用命令
screen -r <id | name> # 进入 screen C-a c # ctrl+a + c , 新建screen窗口 C-a A # ctrl+a + A, 命名scree ...
- mysql in
2016年4月13日 17:11:19 星期三 摘抄自<高性能mysql> 在很多数据库中, IN() 完全等同于多个 OR 的连结 MySQL的IN 会先将列表中的数据线进行排序, 然后 ...
- Entity Framework 与ORACLE ODP.Net 在vs2010下的稀奇古怪的问题
不说废话 1.在vs2010数据源中看不到oracle odp.net 数据源,vs2008下可以看到,通过oraprocfg配置多次,重启多次,还是看不到,machine.config里面配置也正常 ...
- c#中取整,向上取,向下取
Math.Ceiling()向上取整, Math.Floor()向下取整 示例: d = 4.56789 Math.Ceiling(Convert.ToDecimal(d)).ToString();M ...
- c语言for循环
#include<stdio.h>#include<windows.h>#include <limits.h>#include <math.h>void ...
- php curl 例子
get方式: set_time_limit(0); $url ='http://xxxxxxxx?pwd=wJ2312&s=1&e=2&d=1&t=asc ...
- 为何Redis要比Memcached好用(转)
转载链接:http://blog.csdn.net/renfufei/article/details/40598889 GitHub版本地址: https://github.com/cncounter ...