dbms_xplan.display/dbms_xplan.display_cursor/autotrace
这3个都可以显示sql语句的执行计划,那么这3者有什么区别那?
1. Explain plan
Explain plan以SQL语句作为输入,得到这条SQL语句的执行计划,并将执行计划输出存储到计划表中,方法如下:
explain plan for select * from t;
select * from
table(dbms_xplan.display);
注意:Explain plan只生成执行计划,并不会真正执行SQL语句,因此产生的执行计划有可能不准,因为:
1)当前的环境可能和执行计划生成时的环境不同;
2)不会考虑绑定变量的数据类型;
3)不进行变量窥视。
2. 查询动态性能视图
如果你想获取正在执行的或刚执行结束的SQL语句真实的执行计划(即获取库缓存中的执行计划),可以到动态性能视图里查询。方法如下:
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等,但更方便的方法是:
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. AWR报告
AWR报告把动态性能视图中的执行计划保存到dba_hist_sql_plan视图中,我们可以采用如下方法查询AWR中的执行计划:
select * from table(dbms_xplan.display_awr('sql_id');
4. 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
分享到:
相关推荐
DBMS_XPLAN是Oracle提供的一个用于查看SQL计划,包括执行计划和解释计划的包;在以前查看SQL执行计划的时候,我都是使用set autotrace命令,不过现在看来,DBMS_...3.DISPLAY_CURSOR 4.DISPLAY_PLAN 5.DISPLAY_SQL_P
本文档详细介绍了几种不同的方法来获取SQL语句的执行计划,包括使用autotrace、EXPLAIN PLAN以及DBMS_XPLAN.DISPLAY_CURSOR等。 #### 方法1:使用autotrace查看执行计划 **配置使用autotrace** 为了能够使用...
执行`EXPLAIN PLAN`后,可以通过查询`PLAN_TABLE`表或者使用`DBMS_XPLAN.DISPLAY`函数来查看执行计划。例如: ```sql SELECT A.OPERATION, OPTIONS, OBJECT_NAME, OBJECT_TYPE, ID, PARENT_ID FROM PLAN_TABLE a ...
另一种查看执行计划的方式是通过`EXPLAIN PLAN FOR`命令,然后使用`DBMS_XPLAN.DISPLAY`过程来显示计划: **示例代码**: ```sql explain plan for select 1 from dual; SELECT plan_table_output FROM TABLE(DBMS_...
通过查询动态性能视图,如`V$SESSION`和`V$SQL`,可以找到SQL语句的游标信息,然后使用`DBMS_XPLAN.DISPLAY_CURSOR`函数来显示对应的执行计划。这种方法可以获取到最新的执行计划信息。 3. 查询历史执行计划(DBMS_...
此外,还可以使用`DBMS_XPLAN.DISPLAY`过程来查看执行计划: ```sql SELECT * FROM TABLE(DBMS_XPLAN.DISPLAY); ``` ##### 2. 使用 AUTOTRACE **2.1 安装** 要启用`AUTOTRACE`功能,同样需要先确保`plan_table`...
可以通过`EXPLAIN PLAN FOR`命令结合`DBMS_XPLAN.DISPLAY`过程来查看执行计划。 ```sql SQL> EXPLAIN PLAN FOR SELECT * FROM DAVE; SQL> SELECT plan_table_output FROM TABLE(DBMS_XPLAN.DISPLAY('PLAN_TABLE...
SELECT * FROM TABLE(DBMS_XPLAN.DISPLAY); ``` 另外,也可以参考Oracle官方文档获取更多关于执行计划的信息: [http://download-west.oracle.com/docs/cd/B14117_01/server.101/b10752/ex_plan.htm]...
- 使用 `EXPLAIN PLAN FOR`: 配合 `DBMS_XPLAN.DISPLAY_CURSOR` 来获取执行计划。 - 使用 `DBMS_SYSTEM.SET_SQL_TRACE_IN_SESSION`: 同样会将 SQL 的执行情况记录到追踪文件中。 **3. 如何使用 CBO, CBO 与 RULE 的...
SELECT * FROM TABLE(DBMS_XPLAN.DISPLAY_CURSOR); ``` 或者使用Autotrace的`TRACEONLY`和`EXPLAIN`选项: ```sql SET AUTOTRACE TRACEONLY EXPLAIN SELECT * FROM EMP; ``` 了解并熟练运用这些工具,可以帮助我们...
在执行了`EXPLAIN PLAN FOR`后的SQL语句后,输入`SELECT * FROM TABLE(DBMS_XPLAN.DISPLAY);` 这将打印出通过步骤3生成的执行计划。这个输出包含了操作的详细信息,如操作类型、成本、预计的行数、是否在内存中排序...
然后通过`DBMS_XPLAN.DISPLAY`包中的函数来显示执行计划,如: ``` SQL> @?/rdbms/admin/utlxpls 或 SQL> select * from table(DBMS_XPLAN.DISPLAY); ``` 2. **使用AUTOTRACE** `AUTOTRACE`是一种自动分析和...
SELECT * FROM TABLE(DBMS_XPLAN.DISPLAY(NULL, NULL, '')); ``` 更多详情参见官方文档: - [Oracle 官方文档](http://download-west.oracle.com/docs/cd/B14117_01/server.101/b10752/ex_plan.htm) **3. 使用 ...
最常用的方法包括使用EXPLAIN PLAN命令,SET AUTOTRACE ON命令和DBMS_XPLAN.DISPLAY函数。EXPLAIN PLAN命令将执行计划存入plan_table表中,然后通过查询这个表来查看执行计划。而SET AUTOTRACE ON命令则可以在执行...
SELECT * FROM TABLE(DBMS_XPLAN.DISPLAY); 二、优化器(Optimizer) 3. CBO(Cost-Based Optimizer)和RBO(Rule-Based Optimizer)的区别:CBO是基于成本的优化器,选择最低成本的执行路径,而RBO是基于规则的...
- 显示执行计划:`SELECT PLAN_TABLE_OUTPUT FROM TABLE(DBMS_XPLAN.DISPLAY('PLAN_TABLE'));` - **使用 DBMS_XPLAN 包**: - 设置分析标识:`SET STATEMENT_ID = &item_id FOR &sql;` - 显示执行计划:`SELECT *...
这里首先使用`EXPLAIN PLAN FOR`来指定要解释的查询,然后通过调用`dbms_xplan.display`来显示解释计划。 此外,还可以使用`SET AUTOTRACE ON`命令来自动显示执行计划: ```sql SET AUTOTRACE ON; SELECT * FROM...
- **使用`DBMS_XPLAN.DISPLAY()`函数**:通过调用Oracle提供的包`DBMS_XPLAN`中的`DISPLAY()`函数,可以格式化地展示执行计划。 - **直接查询`EXPLAIN_TABLE`**:通过`SELECT`语句直接查询`EXPLAIN_TABLE`,可以...
有两种使用方式:`autotrace`在执行SQL后自动显示执行计划,而`explain plan`则需要手动开启,然后执行`select * from table(dbms_xplan.display);`来查看计划。 在进行数据库优化时,通常会结合这些工具来获取不同...