如何使用SQLPLUS分析SQL语句(查询执行计划跟踪)

方法一:autotrace

1,  connect sys/密码 as sysdba,在sys用户下运行$ORACLE_HOME/sqlplus/admin/plustrce.sql
这段sql的实际内容如下:
set echo on
drop role plustrace;
create role plustrace;
grant select  on v_$sesstat to plustrace;
grant select on v_$statname to plustrace;
grant select on v_$mystat  to plustrace;
grant plustrace to dba with admin option;
set echo off

以上产生plustrace角色,然后在sys用户下把此角色赋予一般用户
SQL> grant PLUSTRACE to 用户名;

2,然后在当前用户SQL>下运行$ORACLE_HOME/rdbms/admin/utlxplan.sql,它会创建一个plan_table,用来存储分析SQL语句的结果。

实际执行的是如下语句:

create table PLAN_TABLE (
                          statement_id    varchar2(30),
                          timestamp       date,
                          remarks         varchar2(80),
                          operation       varchar2(30),
                          options         varchar2(30),
                          object_node     varchar2(128),
                          object_owner    varchar2(30),
                          object_name     varchar2(30),
                          object_instance numeric,
                          object_type     varchar2(30),
                          optimizer       varchar2(255),
                          search_columns  number,
                          id              numeric,
                          parent_id       numeric,
                          position        numeric,
                          cost            numeric,
                          cardinality     numeric,
                          bytes           numeric,
                          other_tag       varchar2(255),
                          partition_start varchar2(255),
                          partition_stop  varchar2(255),
                          partition_id    numeric,
                          other           long,
                          distribution    varchar2(30));

3,SQL/PLUS的窗口运行以下命令

set time on;                 (说明:打开时间显示)(可选)
set autotrace on;            (说明:打开自动分析统计,并显示SQL语句的运行结果)
set autotrace traceonly;     (说明:打开自动分析统计,不显示SQL语句的运行结果)

4,接下来你就运行需要查看执行计划的SQL语句,看到其分析统计结果了。一般来讲,我们的SQL语句应该避免对大表的全表扫描。

5,关闭以上功能,在SQL/PLUS的窗口运行以下命令

set time off;                      (说明:关闭时间显示)
set autotrace off;

附:相关的set autotrace命令:

SET AUTOTRACE OFF
No AUTOTRACE report is generated.

SET AUTOTRACE ON EXPLAIN
shows only the optimizer execution path.

SET AUTOTRACE ON

STATISTICS shows only the SQL statement execution statistics.

SET AUTOTRACE ON
includes both the optimizer execution path and the SQL statement execution statistics.

SET AUTOTRACE TRACEONLY
Like SET AUTOTRACE ON, but suppresses the printing of the user’s query output, if any.

说明:如果执行了set autotrace on 语句,接下来的查询、插入、更新、删除语句就会显示执行计划和有用的统计信息,直到执行set autotrace off语句。

方法二: EXPLAIN PLAN FOR sql

1,在sqlplus下执行:EXPLAIN PLAN FOR sql语句,执行后会提示已经解释。

2,然后执行如下查询,查询出执行计划

SQL> select * from table(dbms_xplan.display);

例子:

SQL> explain plan for select * from emp where deptno=‘20‘;

Explained.

SQL> select * from table(dbms_xplan.display);

注:除了上面的,还有一个很有用的函数dbms_xplan.display_awr(sql_id ,null,null,‘ALL‘);这个可以结合AWR报告中的SQL语句的SQL_ID来获得历史语句的执行计划,然后通过视图 dba_hist_sqlbind 找到语句对应的绑定变量值。

时间: 2024-10-24 23:50:26

如何使用SQLPLUS分析SQL语句(查询执行计划跟踪)的相关文章

如何通过outline为SQL语句指定执行计划

创建测试表 以用户jyu连接,创建测试表 SQL> conn jyu/jyu; Connected. SQL> create table t (id number, name varchar2(100)); Table created. SQL> insert into t select rownum,object_name from dba_objects; 47391 rows created. SQL> commit; Commit complete. 创建索引 SQL>

详细分析SQL语句逻辑执行过程和相关语法

本文目录: 1.SQL语句的逻辑处理顺序 1.2 各数据库系统的语句逻辑处理顺序 1.2.1 SQL Server和Oracle的逻辑执行顺序 1.2.2 MariaDB的逻辑执行顺序 1.2.3 MySQL的逻辑执行顺序 1.3 关于表表达式和虚拟表 1.4 关于表别名和列别名 1.5 关于数据无序性和ORDER BY 1.6 关于TOP(或LIMIT)和ORDER BY 1.7 关于DISTINCT和GROUP BY 1.8 关于DISTINCT和ORDER BY 1.9 关于标准SQL的G

有多少办法可以查看一个Oracle SQL语句的执行计划 - SQL EXECUTE PLAN

待补充,如果要做一个SQL自动审核工具,从哪里可以下手? 1.通过SQL*PLUS工具里的EXPLAIN PLAN FOR判断,利用DBMS_XPLAN.DISPLAY显示. 2.通过SQL*PLUS工具里的 SET AUTOTRACE命令显示 3.SQL_TRACE,在数据库全局(有性能问题,基本上是废的选项),或者对当前Session定义SQL_TRACE,或者利用DBMS_SYSTEM.SET_SQL_TRACE_IN_SESSION获取其他Session的SQL_TRACE.利用TKPR

【测试】并使用scott用户下的emp表写一条SQL语句,执行计划走唯一索引

SQL>set autotrace onSQL>select sal from emp where empno=7902; SAL ---------- 3000 Execution Plan ---------------------------------------------------------- Plan hash value: 2949544139 -----------------------------------------------------------------

【测试】使用hr用户下的employees表写一条SQL语句,执行计划走索引全扫描

SQL> select count(*) from employees; COUNT(*) ---------- 107 Execution Plan ---------------------------------------------------------- Plan hash value: 3580537945 ------------------------------------------------------------------------- | Id | Operat

ORACLE数据库SQL语句的执行过程

首先是最简单链接数据库的过程,JDBC标准的链接的过程: 1. 载入JDBC驱动程序,一般来说载入驱动程序,采用的都是利用Class.forName()反射来加载驱动 Oracle: Class.forName("oracle.jdbc.driver.OracleDriver"); SQLServer: Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver"); MySql: Class.forNam

sql语句的执行原理

SQL语句执行过程详解 2014-07-17 01:15:43 分类: Oracle SQL语句执行过程详解一条sql,plsql的执行到底是怎样执行的呢?一.SQL语句执行原理:第一步:客户端把语句发给服务器端执行当我们在客户端执行 select 语句时,客户端会把这条 SQL 语句发送给服务器端,让服务器端的进程来处理这语句.也就是说,Oracle 客户端是不会做任何的操作,他的主要任务就是把客户端产生的一些 SQL 语句发送给服务器端.虽然在客户端也有一个数据库进程,但是,这个进程的作用跟

mysql优化(三)–explain分析sql语句执行效率

mysql优化(三)–explain分析sql语句执行效率 mushu 发布于 11个月前 (06-04) 分类:Mysql 阅读(651) 评论(0) Explain命令在解决数据库性能上是第一推荐使用命令,大部分的性能问题可以通过此命令来简单的解决,Explain可以用来查看SQL语句的执行效 果,可以帮助选择更好的索引和优化查询语句,写出更好的优化语句. Explain语法:explain select … from … [where …] 例如:explain select * from

mysql优化--explain分析sql语句执行效率

Explain命令在解决数据库性能上是第一推荐使用命令,大部分的性能问题可以通过此命令来简单的解决,Explain可以用来查看SQL语句的执行效 果,可以帮助选择更好的索引和优化查询语句,写出更好的优化语句. Explain语法:explain select - from - [where -] 例如:explain select * from news; 输出:+----+-------------+-------+-------+-------------------+---------+-