ICode9

精准搜索请尝试: 精确搜索
首页 > 数据库> 文章详细

【DB笔试面试600】在Oracle中,如何获取SQL历史执行计划?

2021-04-15 22:57:48  阅读:286  来源: 互联网

标签:600 DB AWR file SQL TABLE ID SELECT


640?wx_fmt=gif

题目 部分

在Oracle中,如何获取SQL历史执行计划?


     

答案部分


历史执行计划只能从AWR中获取,如果AWR没有记录的话,那么就无法获取历史执行计划了,获取历史执行计划的命令如下所示:

1SELECT  * FROM TABLE(DBMS_XPLAN.DISPLAY_AWR('&sqlid'));SELECT  * FROM TABLE(DBMS_XPLAN.DISPLAY_AWR('&sqlid'));

对于历史计划,可以生成SQL报告,命令如下所示:


1SELECT * FROM TABLE(DBMS_WORKLOAD_REPOSITORY.AWR_SQL_REPORT_HTML(L_DBID => , L_INST_NUM => , L_BID => , L_EID => , L_SQLID => )) ;SELECT * FROM TABLE(DBMS_WORKLOAD_REPOSITORY.AWR_SQL_REPORT_HTML(L_DBID => , L_INST_NUM => , L_BID => , L_EID => , L_SQLID => )) ;

其中,L_DBID代表数据库的DBID,L_INST_NUM代表数据库的实例号,单机环境为1,RAC环境填写具体的实例号,L_BID为开始的快照号,L_EID为结束的快照号,L_SQLID为要查看SQL的SQL_ID。

下面的例子可以直接从AWR中获取SQL_ID为“bsa0wjtftg3uw”的执行计划,可以看到历史有2种执行计划,一个是全表扫描,一个是索引范围扫描:


1SYS@RAC2LHR1> SELECT * FROM TABLE(DBMS_XPLAN.DISPLAY_AWR(SQL_ID => 'bsa0wjtftg3uw' )) ; 2SQL_ID bsa0wjtftg3uw 3-------------------- 4SELECT file# FROM file$ WHERE ts#=:1 5Plan hash value: 690176192 6----------------------------------------------- 7| Id  | Operation                   | Name    | 8----------------------------------------------- 9|   0 | SELECT STATEMENT            |         |10|   1 |  TABLE ACCESS BY INDEX ROWID| FILE$   |11|   2 |   INDEX RANGE SCAN          | I_FILE2 |12-----------------------------------------------13Note14-----15   - rule based optimizer used (consider using cbo)16SQL_ID bsa0wjtftg3uw17--------------------18SELECT file# FROM file$ WHERE ts#=:119Plan hash value: 349462606820---------------------------------------------------------------------------21| Id  | Operation         | Name  | Rows  | Bytes | Cost (%CPU)| Time     |22---------------------------------------------------------------------------23|   0 | SELECT STATEMENT  |       |       |       |     2 (100)|          |24|   1 |  TABLE ACCESS FULL| FILE$ |     1 |     6 |     2   (0)| 00:00:01 |25---------------------------------------------------------------------------2631 rows selected.SELECT * FROM TABLE(DBMS_XPLAN.DISPLAY_AWR(SQL_ID => 'bsa0wjtftg3uw' )) ;
2SQL_ID bsa0wjtftg3uw
3--------------------
4SELECT file# FROM file$ WHERE ts#=:1
5Plan hash value: 690176192
6-----------------------------------------------
7| Id  | Operation                   | Name    |
8-----------------------------------------------
9|   0 | SELECT STATEMENT            |         |
10|   1 |  TABLE ACCESS BY INDEX ROWID| FILE$   |
11|   2 |   INDEX RANGE SCAN          | I_FILE2 |
12-----------------------------------------------
13Note
14-----
15   - rule based optimizer used (consider using cbo)
16SQL_ID bsa0wjtftg3uw
17--------------------
18SELECT file# FROM file$ WHERE ts#=:1
19Plan hash value: 3494626068
20---------------------------------------------------------------------------
21| Id  | Operation         | Name  | Rows  | Bytes | Cost (%CPU)| Time     |
22---------------------------------------------------------------------------
23|   0 | SELECT STATEMENT  |       |       |       |     2 (100)|          |
24|   1 |  TABLE ACCESS FULL| FILE$ |     1 |     6 |     2   (0)| 00:00:01 |
25---------------------------------------------------------------------------
2631 rows selected.



本文选自《Oracle程序员面试笔试宝典》,作者:李华荣。



640?wx_fmt=gif

---------------优质麦课------------

640?wx_fmt=png

 详细内容可以添加麦老师微信或QQ私聊。


640?wx_fmt=gif


About Me:小麦苗

● 本文作者:小麦苗,只专注于数据库的技术,更注重技术的运用

● 作者博客地址:http://blog.itpub.net/26736162/abstract/1/

● 本系列题目来源于作者的学习笔记,部分整理自网络,若有侵权或不当之处还请谅解

● 版权所有,欢迎分享本文,转载请保留出处

● QQ:646634621  QQ群:618766405

● 提供OCP、OCM和高可用部分最实用的技能培训

● 题目解答若有不当之处,还望各位朋友批评指正,共同进步

640?wx_fmt=gifDBA宝典

长按下图识别二维码或微信扫描下图二维码来关注小麦苗的微信公众号:xiaomaimiaolhr,学习最实用的数据库技术。

640?wx_fmt=gif

640?wx_fmt=gif

640?wx_fmt=png喜欢就点击“好看”吧



标签:600,DB,AWR,file,SQL,TABLE,ID,SELECT
来源: https://blog.51cto.com/lhrbest/2709606

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有