返回顶部
首页 > 资讯 > 数据库 >快速得到SQL带A-Time时间的执行计划的小技巧
  • 941
分享到

快速得到SQL带A-Time时间的执行计划的小技巧

2024-04-02 19:04:59 941人浏览 八月长安
摘要

快速得到sql带A-Time时间的执行计划的小技巧 使用spool把结果输出到文件,然后直接去文件查看执行计划即可 得到带时间的执行计划的方法有两种: 1、在会话设置参数statistics_le

快速得到sql带A-Time时间的执行计划的小技巧

使用spool把结果输出到文件,然后直接去文件查看执行计划即可

得到带时间的执行计划的方法有两种:

1、在会话设置参数statistics_level=all

alter session set statistics_level=all;
执行SQL
select * from table(dbms_xplan.display_cursor(null,null,'allstats last'));

2、在语句中使用hint(),然后查出这个SQL的SQL_ID,然后再去查询执行计划

执行SQL
select  count(*) from test;
查询SQL的SQL_ID
select sql_id,sql_text from v$sql where sql_text like '%%';
查看执行计划
select * from table(dbms_xplan.display_cursor('sql_id',null,'allstats'));

以上的两种方式都可以得到带时间的执行计划。

但是用这样的方式去查看执行计划,有一个弊端:必须等到SQL语句的全部的记录在屏幕输出,然后才可以查看执行计划。

为了不需要等待SQL执行完,然后才可以查看执行计划;以及不需要在屏幕输出SQL的执行结果刷屏,

可以采用把SQL的结果以及执行计划输出到文件,然后去文件查看执行计划。

!!!注意:!!!

使用spool把结果输出到文件,是把查询结果输出到文件,包含真实的数据,因此需要慎重考虑,

是否可以采取这样的方式进行查询。

测试

需要查看一条SQL的带时间的执行计划

方法1、

设置会话参数
alter session set statistics_level=all;
执行SQL
select * from t1 where c1 <= 90000;
需要等待执行完SQL,然后才可以查询
查看执行计划
select * from table(dbms_xplan.display_cursor(null,null,'allstats last'));

方法2、

执行带hint的SQL
select * from t1 where c1 <= 90000;
需要等待执行完SQL
查询该SQL对应的SQL_ID
select sql_id,sql_text from v$sql where sql_text like '%%';
查看执行计划(根据这条SQL的SQL_ID查询)
select * from table(dbms_xplan.display_cursor('sql_id',null,'allstats'));

方法3、

先编写脚本

vi test.sql
set line 200 pages 999
set timing on
set termout off
spool /home/oracle/test.txt
alter session set statistics_level=all;
select * from t1 where c1 <= 90000;
select * from table(dbms_xplan.display_cursor(null,null,'allstats last'));
spool off
-----------
参数解释:
set line 200 pages 999  设置输出格式
set timing on设置时间
set termout off设置不让脚本的内容在屏幕输出
spool /home/oracle/test.txt 打开spool;并且设置输出文件的位置以及名称
spool off关闭spool,否则会一直把sqlplus里的内容写道test.txt文件中
登录到sqlplus
sqlplus / as sysdba
(或者执行该SQL的用户)
执行该脚本
@/home/oracle/test.txt
查看文件中的执行计划
90000 rows selected.
Elapsed: 00:00:25.90
PLAN_TABLE_OUTPUT                                                                                                                                                                      
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
SQL_ID  caumajpb0jz24, child number 1                                                                                                                                                  
-------------------------------------                                                                                                                                                  
select * from t1 where c1 <= 90000                                                                                                                           
Plan hash value: 4200789634                                                                                                                                                            
------------------------------------------------------------------------------------------------------------                                                                           
| Id  | Operation                   | Name      | Starts | E-Rows | A-Rows |   A-Time   | Buffers | Reads  |                                                                           
------------------------------------------------------------------------------------------------------------                                                                           
|   0 | SELECT STATEMENT            |           |      1 |        |  90000 |00:00:14.07 |     456K|    315K|                                                                           
|   1 |  TABLE ACCESS BY INDEX ROWID| T1        |      1 |  90001 |  90000 |00:00:14.07 |     456K|    315K|                                                                           
|*  2 |   INDEX RANGE SCAN          | IDX_T1_C1 |      1 |  90001 |  90000 |00:00:00.08 |    6187 |      0 |                                                                           
------------------------------------------------------------------------------------------------------------                                                                           
Predicate InfORMation (identified by operation id):                                                                                                                                    
---------------------------------------------------                                                                                                                                    
   2 - access("C1"<=90000)                                                                                                                                                             
19 rows selected.
Elapsed: 00:00:00.08

等执行完毕去查看该文件即可,在文件最低端可以看到执行计划,省去了中间刷屏的时间,

但是产生了一个带有数据的文件,当记录很多时,最好不要使用,

此方法只作为小技巧,需要看具体情况去判断是否使用该方法。

您可能感兴趣的文档:

--结束END--

本文标题: 快速得到SQL带A-Time时间的执行计划的小技巧

本文链接: https://lsjlt.com/news/45678.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作