以前总想知道SQL的运行时间,可有效地进行SQL优化,公司的DBA昨天给我们分享了一下,感觉很不错,呵呵,现在总结如下:
第一种:在SQLPLUS中:在sqlplus工具下,
注:set autotract on 显示执行计划和统计信息:
set autotracetraceonly;只显示trace信息不显示SQL结果如
SQL> set autotrace traceonly;
SQL> select t.*, t.rowid from acl_entry t;
未选定行
执行计划
----------------------------------------------------------
Plan hash value: 3539363351
-------------------------------------------------------------------------------
| Id |Operation |Name | Rows | Bytes | Cost (%CPU)|Time |
-------------------------------------------------------------------------------
| 0 | SELECTSTATEMENT | | 1 | 86| 2 (0)| 00:00:01 |
| 1 | TABLEACCESS FULL| ACL_ENTRY| 1 | 86| 2 (0)| 00:00:01 |--全表扫描,还有一种是检索。
-------------------------------------------------------------------------------
统计信息
----------------------------------------------------------
0 recursive calls--回滚
0 db block gets
3 consistent gets--一致性读
0 physical reads--如果高,在内存中没有缓存。尤其观察的是physicalreads,这项越小越好
0 redo size
680 bytes sent via SQL*Net to client
326 bytes received via SQL*Net from client
1 SQL*Net roundtrips to/from client
0 sorts(memory)--当有排序语句时,内存中的执行时间,内存中遵循时间过时LRU算法
0 sorts(disk)--当有排序语句时,硬盘中的执行时间,当内存不够时执行,如果值大,说明耗时
0 rows processed
set autotrace onstatistics; 只显示统计信息
如:
SQL> set autotrace on statistics;
SQL> select t.*, t.rowid from acl_entry t;
未选定行
统计信息
----------------------------------------------------------
1 recursive calls
0 db block gets
3 consistent gets
0 physical reads
0 redo size
680 bytes sent via SQL*Net to client
326 bytes received via SQL*Net from client
1 SQL*Net roundtrips to/from client
0 sorts (memory)
0 sorts (disk)
0 rows processed
SQL> set timing on
SQL> select t.*, t.rowid from acl_entry t;
未选定行
已用时间: 00: 00: 00.01
执行计划
----------------------------------------------------------
Plan hash value: 3539363351
-------------------------------------------------------------------------------
| Id |Operation |Name | Rows | Bytes | Cost (%CPU)|Time |
-------------------------------------------------------------------------------
| 0 | SELECTSTATEMENT | | 1 | 86| 2 (0)| 00:00:01 |
| 1 | TABLEACCESS FULL| ACL_ENTRY| 1 | 86| 2 (0)| 00:00:01 |
-------------------------------------------------------------------------------
统计信息
----------------------------------------------------------
0 recursive calls
0 db block gets
3 consistent gets
0 physical reads
0 redo size
680 bytes sent via SQL*Net to client
326 bytes received via SQL*Net from client
1 SQL*Net roundtrips to/from client
0 sorts (memory)
0 sorts (disk)
0 rows processed
注意,set autotraceon,set timing on 都需要关闭:关闭用:set autotrace off,set timingoff
autotrace on exp--只显示执行计划。
第二种:在PL/SQL选中SQL语句---》EXPLAIN PLAN,只可以查到是全表查询还是索引查询,有的工具如:Oraclesql developer还可以看到执行时间,本人觉得最牛的还是用SQLPLUS
安装ORACLE客户端后,先配置NET CONFIGURATION ASSISTANT,或直接到
D:\oracle\product\10.2.0\client_2\NETWORK\ADMIN\TNSNAMES.ORA进行配置。
环境变量中配置了两个ORACLE,如果想指定其中的一个时,用:setPath=D:\oracle\product\10.2.0\client
_2\bin
tnsping sellmanager