以前总想知道sql的运行时间,可有效地进行sql优化,公司的DBA昨天给我们分享了一下,感觉很不错,呵呵,现在总结如下:
setautotracetraceonly;只显示trace信息不显示sql结果如
sql>setautotracetraceonly;
sql>selectt.*,t.rowidfromacl_entryt;
未选定行
执行计划
----------------------------------------------------------
Planhashvalue:3539363351
-------------------------------------------------------------------------------
|Id|Operation|Name|Rows|Bytes|Cost(%cpu)|Time|
-------------------------------------------------------------------------------
|0|SELECTSTATEMENT||1|86|2(0)|00:00:01|
|1|TABLEACCESSFULL|ACL_ENTRY|1|86|2(0)|00:00:01|--全表扫描,还有一种是检索。
-------------------------------------------------------------------------------
统计信息
----------------------------------------------------------
0recursivecalls--回滚
0dbblockgets
3consistentgets--一致性读
0physicalreads--如果高,在内存中没有缓存。尤其观察的是physicalreads,这项越小越好
0redosize
680bytessentviasql*Nettoclient
326bytesreceivedviasql*Netfromclient
1sql*Netroundtripsto/fromclient
0sorts(memory)--当有排序语句时,内存中的执行时间,内存中遵循时间过时LRU算法
0sorts(disk)--当有排序语句时,硬盘中的执行时间,当内存不够时执行,如果值大,说明耗时
0rowsprocessed
setautotraceonstatistics;只显示统计信息
如:
sql>setautotraceonstatistics;
sql>selectt.*,t.rowidfromacl_entryt;
未选定行
统计信息
----------------------------------------------------------
1recursivecalls
0dbblockgets
3consistentgets
0physicalreads
0redosize
680bytessentviasql*Nettoclient
326bytesreceivedviasql*Netfromclient
1sql*Netroundtripsto/fromclient
0sorts(memory)
0sorts(disk)
0rowsprocessed
sql>settimingon
sql>selectt.*,t.rowidfromacl_entryt;
未选定行
已用时间:00:00:00.01
执行计划
----------------------------------------------------------
Planhashvalue:3539363351
-------------------------------------------------------------------------------
|Id|Operation|Name|Rows|Bytes|Cost(%cpu)|Time|
-------------------------------------------------------------------------------
|0|SELECTSTATEMENT||1|86|2(0)|00:00:01|
|1|TABLEACCESSFULL|ACL_ENTRY|1|86|2(0)|00:00:01|
-------------------------------------------------------------------------------
统计信息
----------------------------------------------------------
0recursivecalls
0dbblockgets
3consistentgets
0physicalreads
0redosize
680bytessentviasql*Nettoclient
326bytesreceivedviasql*Netfromclient
1sql*Netroundtripsto/fromclient
0sorts(memory)
0sorts(disk)
0rowsprocessed
注意,setautotraceon,settimingon都需要关闭:关闭用:setautotraceoff,settimingoff
autotraceonexp--只显示执行计划。
第二种:在PL/sql选中sql语句---》EXPLAINPLAN,只可以查到是全表查询还是索引查询,有的工具如:Oraclesqldeveloper还可以看到执行时间,本人觉得最牛的还是用sqlPLUS
安装ORACLE客户端后,先配置NETCONFIGURATIONASSISTANT,或直接到
D:\oracle\product\10.2.0\client_2\NETWORK\ADMIN\TNSNAMES.ORA进行配置。
环境变量中配置了两个ORACLE,如果想指定其中的一个时,用:setPath=D:\oracle\product\10.2.0\client
_2\bin
tnspingsellmanager