ITPub博客

首页 > 数据库 > Oracle > oracle执行计划查看的几种方式

oracle执行计划查看的几种方式

原创 Oracle 作者:hongxiang22355 时间:2023-08-08 14:49:41 0 删除 编辑

oracle执行计划查看的几种方式

1生成执行计划

预估执行计划 :每执行一次EXPLAIN PLAN,DB优化器(Optimizer)就会生成执行计划* 而不执行SQL * (因此叫“预估”),并写入PLAN_TABLE表中(Oracle默认使用PLAN_TABLE临时表来保存EXPLAIN PLAN的结果):




EXPLAIN PLAN
  SET STATEMENT_ID = 'statement1'  --指定该条语句的statement_id,后续可用于查询PLAN_TABLE表中的执行计划
  INTO my_plan_table               --可以不使用默认的PLAN_TABLE而使用自定义表
FOR
SELECT last_name FROM employees;    --要分析的SQL语句。INSERT, UPDATE, SELECT和DELETE语句。

简单的使用

SYS@EMREP> explain plan for  select * from t1;


Explained.

SYS@EMREP>  select * from table(dbms_xplan.display);

PLAN_TABLE_OUTPUT
------------------------------------------------------------------------------------------------------------------------
Plan hash value: 3617692013

--------------------------------------------------------------------------
| Id  | Operation         | Name | Rows  | Bytes | Cost (%CPU)| Time     |
--------------------------------------------------------------------------
|   0 | SELECT STATEMENT  |      |     1 |  2028 |     2   (0)| 00:00:01 |
|   1 |  TABLE ACCESS FULL| T1   |     1 |  2028 |     2   (0)| 00:00:01 |
--------------------------------------------------------------------------

Note
-----
  - dynamic sampling used for this statement (level=2)

12 rows selected.

SYS@EMREP>

2 查询执行计划

由于实际执行计划要在执行SQL时才会生成,查看执行计划前,要先执行SQL。 DBMS_XPLAN.DISPLAY_CURSOR 也是一个Oracle自带的函数(点击链接查看详情),它可以展示已经加载到cache中的执行计划:

--不带选项,直接查询最后一条SQL的执行计划

SELECT * FROM TABLE(DBMS_XPLAN.DISPLAY_CURSOR());

--指定了sql_id和child_number,查询指定SQL的执行计划。
SELECT * FROM TABLE(DBMS_XPLAN.DISPLAY_CURSOR('gwp663cqh5qbf',0));

-----------------------------------------------------------

--1.为了区别其他的SQL,需要在执行SQL的时候加入特殊标记的注释,比如:
SELECT /* TOTO */ ename, dname FROM dept d join emp e USING (deptno);

--2.通过SQL标记,查到sql_id和child_number。v$sql是一个系统视图,保存执行过的sql语句
SELECT sql_id, child_number FROM v$sql WHERE sql_text LIKE '%TOTO%';

SQL_ID         CHILD_NUMBER
----------     -----------------------------
gwp663cqh5qbf   0

--3.再查询该SQL的执行计划
SELECT * FROM TABLE(DBMS_XPLAN.DISPLAY_CURSOR('gwp663cqh5qbf',0));


select * from table(dbms_xplan.display_cursor(null,null,'allstats last'));
  

3 sqlplus 配置自动查看

查看执行计划(不执行)

set auotrace traceonly

自动显示执行计划(执行后)

set autotrace on

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/23182478/viewspace-2969030/ ,如需转载,请注明出处,否则将追究法律责任。

上一篇: SYS_HUB小记
下一篇: 没有了~
请登录后发表评论 登录
全部评论

注册时间:2022-12-05

  • 博文量
    3
  • 访问量
    2118