【DB笔试面试600】在Oracle中,如何获取SQL历史执行计划?
2021/4/16 2:30:33
本文主要是介绍【DB笔试面试600】在Oracle中,如何获取SQL历史执行计划?,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
♣题目 部分
在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----- - 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--------------------------------------------------------------------------- rows selected.
本文选自《Oracle程序员面试笔试宝典》,作者:李华荣。
---------------优质麦课------------
详细内容可以添加麦老师微信或QQ私聊。
About Me:小麦苗
● 本文作者:小麦苗,只专注于数据库的技术,更注重技术的运用
● 作者博客地址:http://blog.itpub.net/26736162/abstract/1/
● 本系列题目来源于作者的学习笔记,部分整理自网络,若有侵权或不当之处还请谅解
● 版权所有,欢迎分享本文,转载请保留出处
● QQ:646634621 QQ群:618766405
● 提供OCP、OCM和高可用部分最实用的技能培训
● 题目解答若有不当之处,还望各位朋友批评指正,共同进步
DBA宝典
长按下图识别二维码或微信扫描下图二维码来关注小麦苗的微信公众号:xiaomaimiaolhr,学习最实用的数据库技术。
喜欢就点击“好看”吧
这篇关于【DB笔试面试600】在Oracle中,如何获取SQL历史执行计划?的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-23增量更新怎么做?-icode9专业技术文章分享
- 2024-11-23压缩包加密方案有哪些?-icode9专业技术文章分享
- 2024-11-23用shell怎么写一个开机时自动同步远程仓库的代码?-icode9专业技术文章分享
- 2024-11-23webman可以同步自己的仓库吗?-icode9专业技术文章分享
- 2024-11-23在 Webman 中怎么判断是否有某命令进程正在运行?-icode9专业技术文章分享
- 2024-11-23如何重置new Swiper?-icode9专业技术文章分享
- 2024-11-23oss直传有什么好处?-icode9专业技术文章分享
- 2024-11-23如何将oss直传封装成一个组件在其他页面调用时都可以使用?-icode9专业技术文章分享
- 2024-11-23怎么使用laravel 11在代码里获取路由列表?-icode9专业技术文章分享
- 2024-11-22怎么实现ansible playbook 备份代码中命名包含时间戳功能?-icode9专业技术文章分享