如何了解Oracle生成执行计划

数据库 Oracle
这里介绍Oracle生成执行计划,包括介绍我们还可以为一个正在运行的会话中运行的所有SQL语句生成执行计划,这需要对该会话进行跟踪,产生 trace文件,然后对该文件用tkprof程序格式化一下。

Oracle还是比较常用的,于是我研究了一下Oracle生成执行计划,在这里拿出来和大家分享一下,希望对大家有用。如何Oracle生成执行计划?要为一个语句Oracle生成执行计划,可以有3种方法:

1.最简单的办法

执行完语句后,会显示explain plan 与 统计信息。这个语句的优点就是它的缺点,这样在用该方法查看执行时间较长的sql语句时,需要等待该语句执行成功后,才返回执行计划,使优化的周期大大增长。

这样,就只会列出执行计划,而不会真正的执行语句,大大减少了优化时间。虽然也列出了统计信息,但是因为没有执行语句,所以该统计信息没有用处,如果执行该语句时遇到错误,解决方法为:
(1)在要分析的用户下
(2) 用sys用户登陆

2.用explain plan命令
(1) sqlplus > @ ?\rdbms\admin\utlxplan.sql
(2) sqlplus > explain plan set statement_id =’???’ for select ………………

注意,用此方法时,并不执行sql语句,所以只会列出执行计划,不会列出统计信息,并且执行计划只存在plan_table中。所以该语句比起set autotrace traceonly可用性要差。需要用下面的命令格式化输出,所以这种方式我用的不多。

上面这2种方法只能为在本会话中正在运行的语句产生执行计划,即我们需要已经知道了哪条语句运行的效率很差,我们是有目的只对这条SQL语句去优化。其实,在很多情况下,我们只会听一个客户抱怨说现在系统运行很慢,而我们不知道是哪个SQL引起的。此时有许多现成的语句可以找出耗费资源比较多的语句。

从而对找出的语句进行进一步优化。当然我们还可以为一个正在运行的会话中运行的所有SQL语句生成执行计划,这需要对该会话进行跟踪,产生 trace文件,然后对该文件用tkprof程序格式化一下,这种得到执行计划的方式很有用,因为它包含其它额外信息,如SQL语句执行的每个阶段(如 Parse、Execute、Fetch)分别耗费的各个资源情况(如CPU、DISK、elapsed等)。

3.用dbms_system存储过程Oracle生成执行计划

因为使用dbms_system存储过程可以跟踪另一个会话发出的sql语句,并记录所使用的执行计划,而且还提供其它对性能调整有用的信息。因其使用方式与上面2种方式有些不太一样,所以在附录中单独介绍。这种方法是对SQL进行调整比较有用的方式之一,有些情况下非它不可。具体内容参见附录。

【编辑推荐】

  1. 快速了解Oracle哈希连接
  2. 详细谈论Oracle表连接
  3. 分析Oracle索引扫描四大类
  4. 高手闲谈Oracle索引扫描
  5. 六分钟学会Oracle全表扫描
责任编辑:佚名 来源: 博客园
相关推荐

2009-11-18 17:05:47

捕获Oracle SQ

2009-11-10 16:00:05

Oracle执行计划

2011-09-14 17:03:17

数据库执行计划解析

2017-11-15 08:50:59

数据库MySQL

2024-09-12 15:16:14

2011-08-18 14:10:51

Oracle不走索引

2010-10-27 15:26:42

Oracle执行计划

2021-12-13 22:15:29

SQLOracle共享池

2021-03-17 09:35:51

MySQL数据库explain

2015-04-22 14:17:45

SQL SERVERMSSQL SERVE缓冲区

2023-09-21 10:55:51

MysqlSQL语句

2021-05-28 10:46:36

MySQL执行计划

2017-09-22 11:01:00

Oracle数据库中直方图

2022-08-08 08:03:44

MySQL数据库CBO

2011-05-17 09:32:25

DB2

2014-08-28 09:54:35

SQL Server

2010-04-16 09:27:18

Ocacle执行计划

2021-02-20 08:40:19

HiveExplain底层

2021-04-24 12:01:08

MySQL数据库Mysql执行计划

2020-09-15 08:44:57

MySQL慢日志SQL
点赞
收藏

51CTO技术栈公众号