【Oracle】如何查看sql 执行计划的历史变更

简介:     今天中午,突然接收到active session 数目飙高的报警,查看数据库,对于一个OLTP 类型的查询本应该走index range scan 却变成全部是 direct path read ,所有的sql 走了全表扫描。
    今天中午,突然接收到active session 数目飙高的报警,查看数据库,对于一个OLTP 类型的查询本应该走index range scan 却变成全部是 direct path read ,所有的sql 走了全表扫描。悲剧的是那个表是一个历史表 185G。。故造成了许多session堆积,前台应用受到影响。回到问题本身,如果查看sql执行计划的变更??
oracle 10G 以后可以通过下面的三个视图查询到sql执行计划的历史信息:
DBA_HIST_SQL_PLAN
DBA_HIST_SQLSTAT
DBA_HIST_SNAPSHOT
查看语句的历史执行信息,是否发生变化,何时发生了变化。如果发生了变化,找出以前的执行计划,与当前的执行计划进行对比,有什么不同。
使用如下sql 可以发现某个sql的执行计划什么时候发生了变化!
select distinct SQL_ID,PLAN_HASH_VALUE,to_char(TIMESTAMP,'yyyymmdd hh24:mi:ss')  TIMESTAMP
from dba_hist_sql_plan 
where SQL_ID='68wnxdjxwwn2h' order by TIMESTAMP;
SQL_ID        PLAN_HASH_VALUE TIMESTAMP
------------- --------------- -----------------
68wnxdjxwwn2h       235510920 20111020 21:25:23
68wnxdjxwwn2h      1542630049 20120612 11:57:23
68wnxdjxwwn2h      2754593971 20120612 12:43:34
查看出来执行计划的变化之后 可以使用如下sql查看发生了那些变化!
col options for a15
col operation for a20
col object_name for a20
select plan_hash_value,id,operation,options,object_name,depth,cost,to_char(TIMESTAMP,'yyyymmdd hh24:mi:ss')
    from DBA_HIST_SQL_PLAN  
    where sql_id ='68wnxdjxwwn2h' 
    and plan_hash_value in (1542630049,2754593971,2620382595)
    order by ID,TIMESTAMP;
PLAN_HASH_VALUE         ID OPERATION             OPTIONS         OBJECT_NAME                 COST TO_CHAR(TIMESTAMP
--------------- ---------- --------------------- --------------- --------------------- ---------- -----------------
      235510920          0 SELECT STATEMENT                                                    39 20111020 21:25:23
      235510920          1 NESTED LOOPS                                                           20111020 21:25:23
      235510920          2 NESTED LOOPS                                                        39 20111020 21:25:23
      235510920          3 VIEW                                                                11 20111020 21:25:23
      235510920          4 WINDOW                SORT PUSHED RAN K                                11 20111020 21:25:23
      235510920          5 TABLE ACCESS          FULL            C_ETL_DATA_VALIDITY           10 20111020 21:25:23
      235510920          6 PARTITION LIST        ITERATOR                                       2 20111020 21:25:23
      235510920          7 INDEX                 RANGE SCAN      IDX_C_MEM_XXXXXXXX_ID          2 20111020 21:25:23
      235510920          8 TABLE ACCESS          BY LOCAL INDEX  C_MEM_XXXXXXXX_FATDT0          4 20111020 21:25:23
                                                 ROWID
     1542630049          0 SELECT STATEMENT                                                  7854 20120612 11:57:23 
     1542630049          1 NESTED LOOPS                                                      7854 20120612 11:57:23
     1542630049          2 VIEW                                                                28 20120612 11:57:23
     1542630049          3 WINDOW                SORT PUSHED RANK                              28 20120612 11:57:23
     1542630049          4 TABLE ACCESS          FULL            C_ETL_DATA_VALIDITY           27 20120612 11:57:23
     1542630049          5 PARTITION LIST        ITERATOR                                    7826 20120612 11:57:23
     1542630049          6 TABLE ACCESS          FULL            C_MEM_XXXXXXXX_FATDT0       7826 20120612 11:57:23
     2754593971          0 SELECT STATEMENT                                                    43 20120612 12:43:34
     2754593971          1 PX COORDINATOR                                                         20120612 12:43:34
     2754593971          2 PX SEND               QC (RANDOM)     :TQ10001                         20120612 12:43:34
     2754593971          3 NESTED LOOPS                                                           20120612 12:43:34
     2754593971          4 NESTED LOOPS                                                        43 20120612 12:43:34
     2754593971          5 BUFFER                SORT                                             20120612 12:43:34
     2754593971          6 PX RECEIVE                                                             20120612 12:43:34
     2754593971          7 PX SEND               BROADCAST       :TQ10000                         20120612 12:43:34
     2754593971          8 VIEW                                                                28 20120612 12:43:34
     2754593971          9 WINDOW                SORT PUSHED RANK                              28 20120612 12:43:34
     2754593971         10 TABLE ACCESS          FULL            C_ETL_DATA_VALIDITY           27 20120612 12:43:34
     2754593971         11 PX PARTITION LIST     ITERATOR                                       2 20120612 12:43:34
     2754593971         12 INDEX                 RANGE SCAN      IDX_C_MEM_XXXXXXXX_ID          2 20120612 12:43:34
     2754593971         13 TABLE ACCESS          BY LOCAL INDEX  C_MEM_XXXXXXXX_FATDT0         15 20120612 12:43:34
                                                 ROWID
     2620382595          0 SELECT STATEMENT                                                     5 20120612 18:27:37
     2620382595          1 TABLE ACCESS          BY INDEX ROWID  C_MEM_XXXXXXXX_BAKUP           5 20120612 18:27:37
     2620382595          2 INDEX                 RANGE SCAN      IDX_C_MEM_XXXXXXXX_BA          3 20120612 18:27:37
                                                                 KUP_ID
33 rows selected.
 从上面的结果中可以看出 执行计划在11:57 时出现改变 C_MEM_XXXXXXXX_FATDT0有之前的index range scan 变为了full table scan!!
其他相关文章
上文中提到的  coe_xfr_sql_profile.sql 脚本
目录
相关文章
|
3月前
|
SQL 监控 Oracle
Oracle SQL性能优化全面指南
在数据库管理领域,Oracle SQL性能优化是确保数据库高效运行和数据查询速度的关键
|
3月前
|
SQL 存储 Oracle
Oracle数据库SQL语句详解与应用指南
在数字化时代,数据库已成为各类企业和组织不可或缺的核心组件。Oracle数据库作为业界领先的数据库管理系统之一,广泛应用于各种业务场景。掌握Oracle数据库的SQL语句是数据库管理员、开发人员及运维人员的基本技能。本文将详细介绍Oracle数据库SQL语句的基本概念、语法、应用及最佳实践。一、Or
94 3
|
3月前
|
SQL Oracle 关系型数据库
Oracle SQL:了解执行计划和性能调优
Oracle SQL:了解执行计划和性能调优
83 1
|
Web App开发 Oracle 关系型数据库
oracle查看执行计划
1.explain plan for2.set autotrace3.dbms_xplan3.1 dbms_xplan.display_cursor(null,null,'allstats last')3.
1094 0
|
Oracle 关系型数据库
|
3月前
|
存储 Oracle 关系型数据库
Oracle数据库的应用场景有哪些?
【10月更文挑战第15天】Oracle数据库的应用场景有哪些?
219 64
|
25天前
|
存储 Oracle 关系型数据库
数据库数据恢复—ORACLE常见故障的数据恢复方案
Oracle数据库常见故障表现: 1、ORACLE数据库无法启动或无法正常工作。 2、ORACLE ASM存储破坏。 3、ORACLE数据文件丢失。 4、ORACLE数据文件部分损坏。 5、ORACLE DUMP文件损坏。
83 11
|
2月前
|
Oracle 关系型数据库 数据库
Oracle数据恢复—Oracle数据库文件有坏快损坏的数据恢复案例
一台Oracle数据库打开报错,报错信息: “system01.dbf需要更多的恢复来保持一致性,数据库无法打开”。管理员联系我们数据恢复中心寻求帮助,并提供了Oracle_Home目录的所有文件。用户方要求恢复zxfg用户下的数据。 由于数据库没有备份,无法通过备份去恢复数据库。
|
2月前
|
存储 Oracle 关系型数据库
oracle数据恢复—Oracle数据库文件大小变为0kb的数据恢复案例
存储掉盘超过上限,lun无法识别。管理员重组存储的位图信息并导出lun,发现linux操作系统上部署的oracle数据库中有上百个数据文件的大小变为0kb。数据库的大小缩水了80%以上。 取出&并分析oracle数据库的控制文件。重组存储位图信息,重新导出控制文件中记录的数据文件,发现这些文件的大小依然为0kb。
|
1月前
|
存储 Oracle 关系型数据库
服务器数据恢复—华为S5300存储Oracle数据库恢复案例
服务器存储数据恢复环境: 华为S5300存储中有12块FC硬盘,其中11块硬盘作为数据盘组建了一组RAID5阵列,剩下的1块硬盘作为热备盘使用。基于RAID的LUN分配给linux操作系统使用,存放的数据主要是Oracle数据库。 服务器存储故障: RAID5阵列中1块硬盘出现故障离线,热备盘自动激活开始同步数据,在同步数据的过程中又一块硬盘离线,RAID5阵列瘫痪,上层LUN无法使用。

推荐镜像

更多