首页 数据库 mysql教程 Oracle获取执行计划的几种方法

Oracle获取执行计划的几种方法

Jun 07, 2016 pm 05:29 PM
数字

为了获取缓存库中的执行计划,可以直接查询动态性能视图v$sql_plan和v$sql_plan_statistics_all等,但更方便的方法是以sql_id和子

1. 预估执行计划 - Explain Plan

Explain plan以SQL语句作为输入,得到这条SQL语句的执行计划,并将执行计划输出存储到计划表中。

首先,在你要执行的SQL语句前加explain plan for,此时将生成的执行计划存储到计划表中,语句如下:
 
explain plan for SQL语句
 
然后,在计划表中查询刚刚生成的执行计划,语句如下:
 
select * from table(dbms_xplan.display);

注意:Explain plan只生成执行计划,并不会真正执行SQL语句,因此产生的执行计划有可能不准,因为:

1)当前的环境可能和执行计划生成时的环境不同;
2)不会考虑绑定变量的数据类型;
3)不进行变量窥视。 

2. 查询内存中缓存的执行计划 (dbms_xplan.display_cursor)

如果你想获取正在执行的或刚执行结束的SQL语句真实的执行计划(即获取library cache中的执行计划),可以到动态性能视图里查询。方法如下:

1)获取SQL语句的游标

游标分为父游标和子游标,父游标由sql_id(或联合address和hash_value)字段表示,子游标由child_number字段表示。

如果SQL语句正在运行,可以从v$session中获得它的游标信息,如:
 select status, sql_id, sql_child_number from v$session where status='ACTIVE' and ....

如果知道SQL语句包含某些关键字,可以从v$sql视图中获得它的游标信息,如:
 select sql_id, child_number, sql_text from v$sql where sql_text like '%关键字%‘

2)获取库缓存中的执行计划
 
为了获取缓存库中的执行计划,可以直接查询动态性能视图v$sql_plan和v$sql_plan_statistics_all等,但更方便的方法是以sql_id和子游标为参数,执行如下语句:
 select * from table(dbms_xplan.display_cursor('sql_id',child_number));
 

3)获取前一次的执行计划:
 set serveroutput off
 select * from table(dbms_xplan.display_cursor(null,null,'ALLSTATS LAST'));

3. 查询历史执行计划(dbms_xplan.display_awr)

AWR会定时把动态性能视图中的执行计划保存到dba_hist_sql_plan视图中,如果你想要查看历史执行计划,可以采用如下方法查询:
 select * from table(dbms_xplan.display_awr('sql_id');

4. 在用sqlplus做SQL开发是(Autotrace)

set autotrace是sqlplus工具的一个功能,只能在通过sqlplus连接的session中使用,它非常适合在开发时测试SQL语句的性能,有以下几种参数可供选择:
 

SET AUTOTRACE OFF ---------------- 不显示执行计划和统计信息,这是缺省模式
 SET AUTOTRACE ON EXPLAIN ------ 只显示优化器执行计划
 SET AUTOTRACE ON STATISTICS -- 只显示统计信息
 SET AUTOTRACE ON ----------------- 执行计划和统计信息同时显示
 SET AUTOTRACE TRACEONLY ------ 不真正执行,,只显示预期的执行计划,同explain plan

5. 生成Trace文件查询详细的执行计划 (SQL_Trace, 10046)

SQL_TRACE作为初始化参数可以在实例级别启用,也可以只在会话级别启用,在实例级别启用SQL_TRACE会导致所有进程的活动被跟踪,包括后台进程及所有用户进程,这通常会导致比较严重的性能问题,所以在一般情况下,我们使用sql_trace跟踪当前进程,方法如下:

SQL>alter session set sql_trace=true;
 ...被跟踪的SQL语句...
 SQL>alter session set sql_trace=false;
 如果要跟踪其它进程,可以通过Oracle提供的系统包DBMS_SYSTEM. SET_SQL_TRACE_IN_SESSION来实现,例如:
 SQL> exec dbms_system.set_sql_trace_in_session(sid,serial#,true) --开始跟踪
 SQL> exec dbms_system.set_sql_trace_in_session(sid,serial#,false) --结束跟踪

生成trace文件后,再用tkprof 工具将sql trace 生成的跟踪文件转换成易读的格式,语法如下:
 tkprof inputfile outputfile
 
10046事件是SQL_TRACE的一个升级版,它也是追踪会话,生成Trace文件,只是它里面的内容更详细,

linux

本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热门文章

仓库:如何复兴队友
3 周前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.能量晶体解释及其做什么(黄色晶体)
1 周前 By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island冒险:如何获得巨型种子
3 周前 By 尊渡假赌尊渡假赌尊渡假赌

热门文章

仓库:如何复兴队友
3 周前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.能量晶体解释及其做什么(黄色晶体)
1 周前 By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island冒险:如何获得巨型种子
3 周前 By 尊渡假赌尊渡假赌尊渡假赌

热门文章标签

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

C程序用于找到一个数的最大质因子 C程序用于找到一个数的最大质因子 Aug 27, 2023 am 10:09 AM

C程序用于找到一个数的最大质因子

全球数字虚拟币交易平台排行榜前十(2025权威排名) 全球数字虚拟币交易平台排行榜前十(2025权威排名) Mar 06, 2025 pm 04:36 PM

全球数字虚拟币交易平台排行榜前十(2025权威排名)

币圈十大交易所2025年最新 数字货币app排行榜前十 币圈十大交易所2025年最新 数字货币app排行榜前十 Feb 27, 2025 pm 06:33 PM

币圈十大交易所2025年最新 数字货币app排行榜前十

数字货币app十大交易平台 炒币正规平台app推荐 数字货币app十大交易平台 炒币正规平台app推荐 Mar 07, 2025 pm 06:51 PM

数字货币app十大交易平台 炒币正规平台app推荐

十大数字货币交易平台 数字货币交易平台top10榜单最新 十大数字货币交易平台 数字货币交易平台top10榜单最新 Mar 17, 2025 pm 05:57 PM

十大数字货币交易平台 数字货币交易平台top10榜单最新

靠谱的数字货币平台有哪些 十大正规数字货币交易平台2025 靠谱的数字货币平台有哪些 十大正规数字货币交易平台2025 Mar 17, 2025 pm 05:45 PM

靠谱的数字货币平台有哪些 十大正规数字货币交易平台2025

十大数字货币app交易平台 top10虚拟货币app2025排行榜 十大数字货币app交易平台 top10虚拟货币app2025排行榜 Mar 13, 2025 pm 07:00 PM

十大数字货币app交易平台 top10虚拟货币app2025排行榜

十大数字货币交易app排行榜top10推荐 十大数字货币交易app排行榜top10推荐 Feb 17, 2025 pm 03:18 PM

十大数字货币交易app排行榜top10推荐

See all articles