DBMS_XPLAN包中display_cursor函数不同于display函数,display_cursor用于显示SQL语句的真实的执行计划,在大多数情况下,显示真实
的执行计划有助于更好的分析SQL语句的全过程,尤其是运行此SQL语句实时的I/O开销。通过对比预估的I/O与真实的I/O开销来判断SQL语句所存
在问题,如缺少统计信息,SQL语句执行的次数,根据实际中间结果集的大小来选择合适的连接方式等。本文仅仅讲述display_cursor函数的使
用。
有关执行计划中各字段模块的描述请参考:
执行计划中各字段各模块描述
有关由SQL语句来获取执行计划请参考:
使用 EXPLAIN PLAN 获取SQL语句执行计划
有关使用autotrace来获取执行计划请参考:
启用 AUTOTRACE 功能
有关dbms_xplan之display函数请参考:
dbms_xplan之display函数的使用一、display_cursor函数用法
1、display_cursor函数语法
2、display_cursor函数参数描述
sql_id
指定位于库缓存执行计划中SQL语句的父游标。默认值为null。当使用默认值时当前会话的最后一条SQL语句的执行计划将被返回
可以通过查询V$SQL 或 V$SQLAREA的SQL_ID列来获得SQL语句的SQL_ID。
child_number
指定父游标下子游标的序号。即指定被返回执行计划的SQL语句的子游标。默认值为0。如果为null,则sql_id所指父游标下所有子游标
的执行计划都将被返回。
format
控制SQL语句执行计划的输出部分,即哪些可以显示哪些不显示。使用与display函数的format参数与修饰符在这里同样适用。
除此之外当在开启statistics_level=all时或使用gather_plan_statistics提示可以获得执行计划中实时的统计信息
有关详细的format格式描述请参考:
dbms_xplan之display函数的使用 中format参数的描述
下面给出启用统计信息时format新增的修饰符
iostats 控制I/O统计的显示
last 默认,显示所有执行计算过的统计。如果指定该值,则只显示最后一次执行的统计信息
memstats 控制pga相关统计的显示
allstats 此为iostats memstats的快捷方式,即allstats包含了iostats和memstats
run_stats_last 等同于iostats last。只能用于oracle 10g R1
run_stats_tot 等同于iostats。只能用于oracle 10g R1
二、演示使用display_cursor函数获取执行计划
1、当前数据库版本以及加载执行计划到库缓存
2、查看真实的执行计划
3、查看真实执行计划并获得统计信息
前提条件
设置参数statistics_level为all,可以基于session级别以及实例级别
或者启用gather_plan_statistics提示
三、总结
1、与display函数不同,display_cursor显示的为真实的执行计划
2、对于format参数,使用与display函数的各个值,同样适用于display_cursor函数
3、当statistics_level为all或使用gather_plan_statistics提示可以获得执行时的统计信息
4、根据真实与预估的统计信息可以初步判断SQL效率低下的原因,如统计信息的准确性、主要的开销位于那些步骤等
分享到:
相关推荐
1. `xplan.package.sql` - 这可能是一个创建或调整DBMS_XPLAN包的脚本,包含定义函数和过程的源代码,用户可以使用这些函数和过程来获取执行计划信息。 2. `xplan.display_awr.sql` - AWR(Automatic Workload ...
在以前查看SQL执行计划的时候,我都是使用set autotrace命令,不过现在看来,DBMS_XPLAN包给出了更加简化的获取和显示计划的方式。 这5个函数分别对应不同的显示计划的方式,DBMS_XPLAN包不仅可以获取解释计划,它还...
2. **查看执行计划**:使用`dbms_xplan.display()`函数来查看生成的执行计划。 ```sql select * from table(dbms_xplan.display()); ``` 3. **查看高级执行计划**:如果需要查看更详细的执行计划信息,可以使用...
通过查询动态性能视图,如`V$SESSION`和`V$SQL`,可以找到SQL语句的游标信息,然后使用`DBMS_XPLAN.DISPLAY_CURSOR`函数来显示对应的执行计划。这种方法可以获取到最新的执行计划信息。 3. 查询历史执行计划(DBMS_...
SELECT * FROM TABLE(DBMS_XPLAN.DISPLAY_CURSOR); ``` 或者使用Autotrace的`TRACEONLY`和`EXPLAIN`选项: ```sql SET AUTOTRACE TRACEONLY EXPLAIN SELECT * FROM EMP; ``` 了解并熟练运用这些工具,可以帮助我们...
- 使用`DBMS_XPLAN.DISPLAY_CURSOR`显示执行计划,检查是否使用了索引。 - 使用`DBMS_STATS`重新收集索引统计信息,确保准确性。 - **2.1.24 Shared Pool优化和Library Cache Latch冲突优化** - Shared Pool是...
4. **OPEN语句**:打开游标,查询`DBMS_XPLAN.DISPLAY()`函数返回的结果。`DBMS_XPLAN.DISPLAY()`是Oracle提供的一个包,用于展示执行计划的详细信息。 5. **LOOP-FETCH结构**:遍历游标中的每一行数据,通过`DBMS_...
使用`DBMS_XPLAN.DISPLAY`或`DBMS_XPLAN.DISPLAY_CURSOR`函数,可以获取带有格式化的执行计划和额外的统计信息。 3. **执行计划的分析** - **操作符**:执行计划由一系列操作符组成,如TABLE ACCESS(表访问)、...
SELECT * FROM TABLE(DBMS_XPLAN.DISPLAY); ``` 这可以帮助优化查询性能,了解数据库如何处理查询,包括使用的索引、连接方法等。 3. **文本操作**: Oracle提供了一系列函数来处理字符串,如`SUBSTR`用于提取...
然后执行了一个对`emp2`表的并行查询,并使用`DBMS_XPLAN.DISPLAY()`函数展示了执行计划。执行计划显示了并行执行的不同阶段,包括并行协调器、并行发送、并行接收等操作,以及如何将表扫描操作并行化。 #### 九、...
使用 `SELECT * FROM TABLE(DBMS_XPLAN.DISPLAY_CURSOR(NULL, NULL, 'ALLSTATS LAST'));` 查看包含详细统计信息的执行计划。 - **其他技巧**: - 使用 `/*+ GATHER_PLAN_STATISTICS */` 注释可以在不设置 `...
`EXPLAIN PLAN`用于分析SQL执行计划,`DBMS_XPLAN.DISPLAY_CURSOR`查看执行计划的详细信息,`V$SESSION_WAIT`和`V$SYSTEM_EVENT`视图用于监控系统等待事件。 14. **权限管理**: `GRANT`和`REVOKE`用于赋予和撤销...
- 可以通过`EXPLAIN PLAN FOR`和`DBMS_XPLAN.DISPLAY`来查看SQL的执行计划。 11. **索引的影响**: - 索引可以加快查询速度,但也会占用额外的存储空间且影响插入、删除和更新操作的速度。 12. **绑定变量**: ...
- 使用DBMS_XPLAN.DISPLAY_CURSOR函数获取指定SQL ID的执行计划。 ##### 9. 场景举例 - **示例**: - 假设在AWR报告中发现一条SQL语句执行异常缓慢,平均执行时间为10秒至170秒。 - 可以通过上述方法定位问题的...
- `EXPLAIN PLAN`或`DBMS_XPLAN.DISPLAY`:用于分析查询计划和索引使用。 10. **视图(VIEW)** - 视图是虚拟表,基于一个或多个表的查询结果,如`CREATE VIEW view_name AS SELECT ...;`。 11. **存储过程和...
`DBMS_XPLAN.DISPLAY_CURSOR`函数可以显示当前会话中最后一个执行的SQL语句的执行计划,包括行源、成本、执行步骤等信息。通过比较这两个版本的执行计划,我们可以看到12c的执行计划可能包含了更多的全表扫描或索引...
为了评估并行查询的效果,首先执行了一个非并行的查询,通过`v$sqlarea`和`dbms_xplan.display_cursor`收集和分析查询计划。 在Oracle中,可以通过设置`PARALLEL`选项来启用并行查询。例如,可以使用`SELECT /*+ ...
- **查询执行计划**: 可以通过`EXPLAIN PLAN`命令和`DBMS_XPLAN.DISPLAY_CURSOR`过程来查看SQL语句的执行计划。 #### 18. 缓冲区缓存分析 - **缓冲区缓存分析**: 可以通过查询`V$DB_CACHE_ADVICE`视图来获取缓冲区...