度量快速开发平台-专业、快速的软件定制快开平台

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
热搜: 部件 流程 SQL
查看: 1046|回复: 4
打印 上一主题 下一主题

[分享] 如何追踪Oracle历史执行计划变动

[复制链接]

141

主题

1551

帖子

3573

积分

论坛元老

Rank: 8Rank: 8

积分
3573
跳转到指定楼层
楼主
发表于 2020-5-30 18:23:04 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
/*
在oracle数据库中 同一个SQL语句可能拥有不同的执行计划 历史的执行计划变动可以通过DBA_HIST_SQLPLAN视图或者awr查询到
当前的执行计划保存在V$SQL_PLAN中
Metalink:How to Determine When an Execution Plan was Produced Using DBA_HIST_SQLPLAN (文档 ID 879677.1)
通过对一个简单查询谓词使用到的索引状态进行更改 模拟执行计划的变化
由于DBA_HIST_SQLPLAN视图的数据来源于 workload repository 所以在开始和结束的时候都会手动强制做一次awr快照
*/


SQL> select * from v$version
;
BANNER
--------------------------------------------------------------------------------
Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 - 64bit Production

Session 1#: conn / as sysdba
SQL>  exec dbms_workload_repository.create_snapshot();
SQL> select index_name,status from dba_indexes where index_name='BIG_TABLE_PK';
INDEX_NAME                     STATUS
------------------------------ --------
BIG_TABLE_PK                   VALID
SQL>  oradebug setorapid 31
Oracle pid: 31, Unix process pid: 4673, image: oracle@vrh-ora11gR2 (TNS V1-V3)
SQL> oradebug tracefile_name
/u01/app/oracle/diag/rdbms/freebaseun/freebase/trace/freebase_ora_4673.trc
SQL> oradebug event 10046 trace name context forever,level 12;

Session 2#: conn as scott
SQL> conn scott/tiger
Connected.
SQL> select /*Zhou Test*/ * from big_table where id<10;

Session 1#:
SQL> alter index scott.big_table_pk unusable;
SQL> select index_name,status from dba_indexes where index_name='BIG_TABLE_PK';
INDEX_NAME                     STATUS
------------------------------ --------
BIG_TABLE_PK                   UNUSABLE

Session 2#:
SQL> select /*Zhou Test*/ * from big_table where id<10;

Session 1#:
SQL>  oradebug event 10046 trace name context off;

/***********************************************************OracleFreeBase********************************************/
/*make tkprof on 10046 raw trace*/
oracle@vrh-ora11gR2:/home/oracle>cp /u01/app/oracle/diag/rdbms/freebaseun/freebase/trace/freebase_ora_4673.trc /home/oracle/
oracle@vrh-ora11gR2:/home/oracle>tkprof freebase_ora_4673.trc freebase_ora_4673.out explain="/as sysdba" sys=no

SQL ID: 2yfq6rwp3krjt Plan Hash: 3747652938
select /*Zhou Test*/ *
from
big_table where id<10
Rows (1st) Rows (avg) Rows (max)  Row Source Operation
---------- ---------- ----------  ---------------------------------------------------
         9          9          9  TABLE ACCESS BY INDEX ROWID BIG_TABLE (cr=5 pr=5 pw=0 time=34214 us cost=3 size=819 card=9)
         9          9          9   INDEX RANGE SCAN BIG_TABLE_PK (cr=3 pr=4 pw=0 time=34240 us cost=2 size=0 card=9)(object id 77220)


                                 
SQL ID: 2yfq6rwp3krjt Plan Hash: 3993303771
select /*Zhou Test*/ *
from
big_table where id<10
Rows (1st) Rows (avg) Rows (max)  Row Source Operation
---------- ---------- ----------  ---------------------------------------------------
         9          9          9  TABLE ACCESS FULL BIG_TABLE (cr=72 pr=34 pw=0 time=67 us cost=22 size=819 card=9)
                 
/*上面的10046 trace里面可以看到同一个SQL_ID 2yfq6rwp3krjt 的执行计划已经了 SQL_PLAN中记录了最后一次的plan_hash_value*/

SQL> col sql_text for a50
SQL> col time for a35
SQL> set linesize 200
SQL> SELECT s.sql_text,p.hash_value,p.sql_id,p.plan_hash_value,p.child_number,to_char(p.timestamp,'DD-MON-YYYY HH24:MI:SS') TIME
      FROM V$SQL s, V$SQL_PLAN p
     where s.plan_hash_value = p.plan_hash_value   
       and p.sql_id='2yfq6rwp3krjt';
SQL_TEXT                                           HASH_VALUE SQL_ID        PLAN_HASH_VALUE CHILD_NUMBER TIME
-------------------------------------------------- ---------- ------------- --------------- ------------ -----------------------------------
select /*Zhou Test*/ * from big_table where id<10   708402745 2yfq6rwp3krjt      3993303771            1 26-NOV-2014 17:42:26
select /*Zhou Test*/ * from big_table where id<10   708402745 2yfq6rwp3krjt      3993303771            1 26-NOV-2014 17:42:26


SQL> execute DBMS_WORKLOAD_REPOSITORY.create_snapshot;  /*再次手动收集快照*/

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏
回复

使用道具 举报

141

主题

1551

帖子

3573

积分

论坛元老

Rank: 8Rank: 8

积分
3573
沙发
 楼主| 发表于 2020-5-30 18:23:20 | 只看该作者
回复 支持 反对

使用道具 举报

542

主题

5916

帖子

1万

积分

作者

Rank: 7Rank: 7Rank: 7

积分
13589
板凳
发表于 2020-6-3 16:28:22 | 只看该作者
回复 支持 反对

使用道具 举报

141

主题

1551

帖子

3573

积分

论坛元老

Rank: 8Rank: 8

积分
3573
地板
 楼主| 发表于 2020-6-3 20:11:27 | 只看该作者
回复 支持 反对

使用道具 举报

235

主题

2547

帖子

5835

积分

论坛元老

Rank: 8Rank: 8

积分
5835
5#
发表于 2020-6-4 14:07:31 | 只看该作者
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|重庆度量科技  本站关键词:快速开发平台

GMT+8, 2024-11-27 21:16 , Processed in 0.127193 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表