10053事件分析案例一则

测试库两张表,数据一致,(表有复合主键A+B),但同样执行DELETE TABLE FROM T1/T2 WHERE A='1' AND ROWNUM<100;时,T1表删除时间非常长,T2表删除时间很快。在PLSQL中或sqlplus中查看执行计划都是一样的,表示都用到了索引范围扫描。

PLAN_TABLE_OUTPUT
-----------------------------------------------------------------------
| Id  | Operation            |  Name          | Rows  | Bytes | Cost  |
-----------------------------------------------------------------------
|   0 | DELETE STATEMENT     |                |  1000 | 12000 |  3217 |
|   1 |  DELETE              | T1   |       |       |       |
|*  2 |   COUNT STOPKEY      |                |       |       |       |
|*  3 |    INDEX RANGE SCAN  | IDX_T1  |   420K|  4931K|  3217 |
-----------------------------------------------------------------------
Predicate Information (identified by operation id):
PLAN_TABLE_OUTPUT
--------------------------------------------------------------------------------
   2 - filter(ROWNUM<=1000)
   3 - access("T1"."A"='1')
Note: cpu costing is off

PLAN_TABLE_OUTPUT
--------------------------------------------------------------------
| Id  | Operation            |  Name       | Rows  | Bytes | Cost  |
--------------------------------------------------------------------
|   0 | DELETE STATEMENT     |             |  1000 | 12000 |  2965 |
|   1 |  DELETE              | T2   |       |       |       |
|*  2 |   COUNT STOPKEY      |             |       |       |       |
|*  3 |    INDEX RANGE SCAN  | IDX_T2  |   393K|  4607K|  2965 |
--------------------------------------------------------------------
Predicate Information (identified by operation id):
PLAN_TABLE_OUTPUT
--------------------------------------------------------------------------------
   2 - filter(ROWNUM<=1000)
   3 - access("T2"."A"='1')
Note: cpu costing is off

显然感觉这两个表的实际操作和执行计划不太相符,这时10053事件就起到了作用。

10053介绍:

10053 事件是oracle 提供的用于跟踪sql 语句成本计算的内部事件,它能记载CBO 模式下oracle 优化器如何计算sql 成本,生成相应的执行计划。 用来描述oracle如何选择执行计划的过程,然后输出到trace文件里,因为我们经常看执行计划怎么执行的消耗了哪些资源,而不是常看执行计划怎么选择出来了的。

10053特点:

(1) 只可以了解oracle执行计划的选择过程

(2) 无法获知代价的计算公式,因为这是oracle内部的商业机密,而且每个oracle版本的优化器计算公式都不相同差距还是蛮大的,不同版本的同一个语句的代价也不一样,优化器现在还不是很成熟,还有待完善。

(3) 在这个里面我们重点要了解的是“代价”是如何计算出来的,然后我们才能了解执行计划是如何选择的。

(4) 在10053中可以了解哪些因素影响sql的执行代价

(5) oracle 8i cost等价IO资源消耗   9i以后cost等价IO+CPU+网络+等待事件+其他代价

T1表的10053事件信息:

***************************************

BASE STATISTICAL INFORMATION
***********************
Table stats    Table: T1   Alias: T1 来自user_tables视图
  TOTAL ::  CDN: 2341358  NBLKS:  13921  AVG_ROW_LEN:  40
-- Index stats
来自user_indexes视图
  INDEX NAME: IDX_STAROTHER  COL#: 2 3 
    TOTAL ::  LVLS: 2   #LB: 13609  #DK: 2156054  LB/K: 1  DB/K: 1  CLUF: 165252
_OPTIMIZER_PERCENT_PARALLEL = 0
***************************************
SINGLE TABLE ACCESS PATH
Column: AIRLINE_CO  Col#: 2      Table: T1
Alias: T1
    NDV: 7         NULLS: 0         DENS: 1.4286e-01
    NO HISTOGRAM: #BKT: 1 #VAL: 2
  TABLE: STAROTHERPRF     ORIG CDN: 2341358  ROUNDED CDN: 334480  CMPTD CDN: 334480
  Access path: tsc  Resc:  1340  Resp:  1340
  全表扫描代价(1340),这里tsc我想应该是TableScan的缩写
  Skip scan: ss-sel 0  andv 308008  
    ss cost 308008  索引跳跃扫描的代价(1945)
    index io scan cost 1945 
  Access path: index (index-only)
索引(范围)扫描代价(1947)
      Index: IDX_T1
  TABLE: T1
      RSC_CPU: 0   RSC_IO: 1947
  IX_SEL:  1.4286e-01  TB_SEL:  1.4286e-01

  BEST_CST: 1340.00  PATH: 2  Degree:  1
最佳代价是1340,即全表扫描

对应的执行计划:

***************************************
GENERAL PLANS
***********************
Join order[1]:  STAROTHERPRF[STAROTHERPRF]#0
Best so far: TABLE#: 0  CST:       1340  CDN:     334480  BYTES:    4348240
Final - All Rows Plan:
  JOIN ORDER: 1
  CST: 1340  CDN: 334480  RSC: 1340  RSP: 1340  BYTES: 4348240
  IO-RSC: 1340  IO-RSP: 1340  CPU-RSC: 0  CPU-RSP: 0
QUERY
explain plan for delete from starotherprf WHERE AIRLINE_CODE = 'US' AND ROWNUM <= 1000
PLAN
Cost of plan:  1340
Operation...........Object name.....Options.........Id...Pid..
DELETE STATEMENT                                        0
DELETE              STAROTHERPRF                        1
COUNT                               STOPKEY             2    1
TABLE ACCESS        T1    FULL                3    2
QUERY

显示用的就是全表扫描

T2表的10053事件信息:

***************************************

SINGLE TABLE ACCESS PATH
Column: AIRLINE_CO  Col#: 1      Table: T2 Alias:
T2

    NDV: 19        NULLS: 0         DENS: 5.2632e-02
    NO HISTOGRAM: #BKT: 1 #VAL: 2
  TABLE: CASTARPRF     ORIG CDN: 6665065  ROUNDED CDN: 350793  CMPTD CDN: 350793
  Access path: tsc  Resc:  4275  Resp:  4275
全表扫描代价(4275)
  Skip scan: ss-sel 0  andv 413617   索引跳跃扫描代价(413617)
    ss cost 413617 
    index io scan cost 1973 
  Access path: index (index-only) 索引(范围)扫描代价(1975)
      Index: IDX_T2
  TABLE: T2
      RSC_CPU: 0   RSC_IO: 1975
  IX_SEL:  5.2632e-02  TB_SEL:  5.2632e-02
  BEST_CST: 1975.00  PATH: 4  Degree:  1 最佳代价是1975,即索引扫描

对应的执行计划:

***************************************
GENERAL PLANS
***********************
Join order[1]:  CASTARPRF[CASTARPRF]#0
Best so far: TABLE#: 0  CST:       1975  CDN:     350793  BYTES:    4911102
prefetching is on for IDX_CASTAR
Final - All Rows Plan:
  JOIN ORDER: 1
  CST: 1975  CDN: 350793  RSC: 1975  RSP: 1975  BYTES: 4911102
  IO-RSC: 1975  IO-RSP: 1975  CPU-RSC: 0  CPU-RSP: 0
QUERY
explain plan for delete from castarprf WHERE AIRLINE_CODE = 'US' AND ROWNUM <= 1000
PLAN
Cost of plan:  1975
Operation...........Object name.....Options.........Id...Pid..
DELETE STATEMENT                                        0
DELETE              CASTARPRF                           1
COUNT                               STOPKEY             2    1
INDEX               IDX_T2      RANGE SCAN          3    2
QUERY

显示用的就是索引扫描

现在就可以知道为什么这两张表删除时间不同了,原因就是T1表CBO选择了错误的执行计划,导致全表扫描,因此百万级的数据就会耗费更长的时间。

总结:当感觉SQL语句执行时走的是错误的执行计划,而又找不到原因时,这时请用10053来分析一下原因。这就是10053的适用场景。

时间: 2024-09-25 12:55:47

10053事件分析案例一则的相关文章

ORACLE 10053事件详解

本次我们主要讲解oracle 10053事件和实验,好多朋友可能对这个事件不是很熟悉,因为在日常运维中用到的不是很多.Oracle 10046和10053都是非官方trace sql的方法,在官方文档上是找不到相关资料的,但在MOS上可以找到.sql_trace是官方推荐的trace sql的方法,在官方文档上是可以查询出来的. 10053事件:用来描述oracle如何选择执行计划的过程,然后输出到trace文件里,共我们参考,因为我们经常看执行计划怎么执行的消耗了哪些资源,而不是常看执行计划怎

“大”事务引起的锁等待分析案例

一.现象 生产环境数据库在某一刻突然发现大量活跃连接,而且大部分状态是updating.问题出现在周六上午,持续了大概三.四分钟,得益于我们自己的快照程序,拿到了当时现场的processlist, 锁等待关系,及innodb status 信息:(经过脱敏处理) innodb_status.txt gist片段: var_mydb_snapshot.html,详见:https://gist.coding.net/u/seanlook/d6ad649f81c64e23a25f3a980c44a1f

【10053 事件】10053事件的跟踪文件解析

通过对 sql 做10053 事件,可以发现优化器为什么选择我们看到的最终的执行计划.10053 事件的部分说明. 第一部分  包含了操作系统,内存,cpu ,数据库和会话信息Trace file f:\orcl\diag\rdbms\oracl\oracl\trace\oracl_ora_5080.trc Oracle Database 11g Enterprise Edition Release 11.1.0.6.0 - Production With the Partitioning, O

针对巴基斯坦的某APT活动事件分析

本文讲的是针对巴基斯坦的某APT活动事件分析, 事件背景 2017年6月,360威胁情报中心发现了一份可疑的利用漏洞执行恶意代码的Word文档,经过分析后,我们发现这有可能是一起针对巴基斯坦的政府官员的APT攻击事件,释放出来的载荷会收集受害者的键盘记录和重要软件密码.文档等.本文档对并对此次攻击事件的攻击链条进行梳理,并对使用的木马相关技术进行分析. 样本分析 Dropper Hash 4f4cc89905bea999642a40d0590bdfa3 文件类型 Word文档 文件大小 66Kb

Jquery Ajax学习实例7 Ajax所有过程事件分析示例_jquery

一.Ajax所有过程事件分析    JQuery在执行Ajax的过程中会触发很多事件.   这些事件可以分为两种事件,一种是局部事件(Local),一种是全局事件(Global).   局部事件:可以通过$.ajax来调用,你某一个Ajax请求不希望产生全局的事件,则可以设置global:false.   全局事件:跟click等事件类似,可以绑定到到每一个DOM元素上.   这些事件的按照事件的触发顺序如下介绍:   局部事件(Local) 全局事件(Global) ajaxStart 全局事

解析常见的数据分析模型——行为事件分析

一.什么是行为事件分析? 行为事件分析法主要用于研究某行为事件的发生对企业组织价值的影响以及影响程度.企业借此来追踪或记录用户行为及业务过程,如用户注册.浏览产品详情页.成功投资.提现等,通过研究与事件发生关联的所有因素来挖掘用户行为事件背后的原因.交互影响等. 在日常工作中,运营.市场.产品.数据分析师根据实际工作情况而关注不同的事件指标.如最近三个月来自哪个渠道的用户注册量最高?变化趋势如何?各时段的人均充值金额是分别多少?上周来自北京发生过购买行为的独立用户数,按照年龄段的分布情况?每天的

安天针对“魔鼬”木马DDoS事件分析报告

本文讲的是安天针对"魔鼬"木马DDoS事件分析报告, 1   概述 2017年7月30日,安天安全研究与应急处理中心(Antiy CERT)的工程师发现一种具备拒绝服务(DDoS)攻击能力的新型木马.经初步分析,安天CERT工程师认为该木马属于一个新家族,并将其命名为"魔鼬".通过关联查询安天对于DDoS攻击的历史监测数据,发现本次事件中受攻击的域名同时也在遭受Trojan/Linux.BillGates.Trojan/Linux.Mayday等家族的DDoS攻击.

电子发烧友网观察:半导体第三季重大事件分析

2012年第三季台湾整体IC产业产值(含设计.制造.封装.测试)达新台币4,397亿元,较2012年第二季成长4.9%.2012年第三季台湾IC设计产业表现大幅优于IC製造产业以及IC封装测试产业,成长12.4%,受惠于抢食到智慧终端市场大饼.由于第叁季全球景气不如预期,PC销量下滑,DRAM出货量减少,记忆体产值衰煺9.3%为表现最差者. 首先观察IC设计业,2012年第叁季台湾IC设计业自从2011下半年起经歷产品线调整阵痛之后,已连续出现二个季度成长.台湾IC设计业已积极由PC/NB跨入S

解析10053事件

  转自http://hi.baidu.com/%C8%FD%B7%C9%D4%C6/blog/item/4bdbbb501278f565843524c1.html         你是否想知道一句sql语句如何执行,它是否走索引,是否采用不同得驱动表,是否用nestloop join,hash join-..?这一切对你是否很神秘呢?或许你会说execution plan能看到这些东西,但是你是否清楚execution plan是如何得到?这篇文章就是给出了隐藏在execution plan底