通过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案例处理过程的更多相关文章

  1. FIREDAC(DELPHI10 or 10.1)提交数据给ORACLE数据库的一个不是BUG的BUG

    发现FIREDAC(DELPHI10 or 10.1)提交数据给ORACLE数据库的一个不是BUG的BUG,提交的表名大小写是敏感的. 只要有一个表名字母的大小写不匹配,ORACLE就会认为是一个不认 ...

  2. Oracle之 dmp导入/导出、数据库操作等过程中的字符集问题

    影响Oracle数据库字符集最重要的参数是NLS_LANG参数. 它的格式如下: NLS_LANG = language_territory.charset 它有三个组成部分(语言.地域和字符集),每 ...

  3. android一个下拉放大库bug的解决过程及思考

    android一个下拉放大库bug的解决过程及思考 起因 项目中要做一个下拉缩放图片的效果,搜索了下github上面,找到了两个方案. https://github.com/Frank-Zhu/Pul ...

  4. Bug,项目过程中的重要数据

    作者|孙敏 为什么要做Bug分析? Bug是项目过程中的一个有价值的虫子,它不只是给开发的,而是开给整个项目组的. 通过Bug我们能获得什么? 积累测试方法,增强QA的测试能力,提升产品质量 发现项目 ...

  5. Bug(案例)图片的垂直出现隐藏

    这个案例是一个出Bug的案例,很抱歉本人没有找到bug在哪,但是功能却实现了. <!DOCTYPE html> <html> <head> <meta cha ...

  6. Oracle 11gR2 RAC的两个bug

      Oracle 11.2.0.2 bug还是不少的.很多库迁到Oracle 11.2.0.2后都遇到了问题.现在正在跟的两个Oracle 11.2.0.2上的问题:1.ORA-00600: inte ...

  7. 深入浅出Oracle:DBA入门、进阶与诊断案例(读书笔记1)

    一.数据库的启动和关闭 Oracle Server共有2部分组成:Instance和Database. Instance是指一组后台进程/线程和一块共享内存区域,而Database是指存储在磁盘上的一 ...

  8. ORACLE调整SGA_TARGET值耗费时间长案例

    在一数据库版本为(标准版)Oracle Database 10g Release 10.2.0.4.0 - 64bit Production 的服务器上调整 sga_target时,遇到命令执行了非常 ...

  9. 一个bug案例分析

    Bug描述: 某大型系统的一个提供基础数据服务的子系统A进行了一次升级.升级的内容为:优化了失败重传功能,在优化的同时,开发人员发现传输数据的时间戳精度只是精确到了秒,于是顺手把精度改成了1/100秒 ...

随机推荐

  1. CSS代码片段【图文】

    1.垂直对齐 .verticalcenter{ position: relative; top: 50%; -webkit-transform: translateY(-50%); -o-transf ...

  2. Python函数讲解

    Python函数

  3. 十二天 mysql操作

    本节内容 数据库介绍 mysql 数据库安装使用 mysql管理 mysql 数据类型 常用mysql命令 创建数据库 外键 增删改查表 权限 事务 索引 python 操作mysql ORM sql ...

  4. testng 教程

    Testng 简介: Testng是一套开源测试框架,是从Junit继承而来,testng意为test next generation,主要有以下特性: annotations  注释,如 @test ...

  5. upload&&download

    package am.demo;  import java.io.File;  import java.io.IOException;  import java.util.Iterator;  imp ...

  6. Deep Learning入门视频(上)_一层/两层神经网络code

    关于在51CTO上的深度学习入门课程视频(9)中的code进行解释与总结: (1)单层神经网络: #coding:cp936 #建立单层神经网络,训练四个样本, import numpy as np ...

  7. 数据库Blob数据类型转String

    blob数据是存储大对象数据类型, 一般存放二进制的,所以才用字节存取. 首先判断blob数据是否为空,然后采用输入流读出数据,具体代码如下: String content = null; try { ...

  8. [jquery]添加行内容后根据下拉菜单选择内容对比之前已有选项,若有重置再提示

    今天页面上一个添加列内容时,要对选择内容与之前已有选项内容作对比,防止用户重复选择内容 页面HTML代码 <ul class="list-group xj-list-NObor xj- ...

  9. Ruby多行字符串,begin/end语句、注释

    #!/usr/bin/ruby #puts "Hello ,Ruby!"; print <<EOF #多行字符串 以<<开头 紧接着为结束字符串标识声明 并 ...

  10. 51nod1130(斯特林近似)

    题目链接: https://www.51nod.com/onlineJudge/questionCode.html#!problemId=1130 题意: 中文题诶~ 思路: 直接斯特林公式就好了~ ...