用 sql plus 查看Oracle执行计划 (转帖)

在sql*plus中输入set autotrace on ,然后直接执行sql语句;会自动显示执行计划和统计信息。
缺点: 用该方法查看执行时间较长的sql语句时,需要等待该语句执行成功后,才返回执行计划,使优化的周期大大增长。
如果不想执行语句而只是想得到执行计划可以采用 set autotrace traceonly 这样,就只会列出执行计划,而不会真正的执行语句,大大减少了优化时间。虽然也列出了统计信息,但是因为没有执行语句,所以该统计信息没有用处。


set autotrace 选项 :
on            显示查询结果,执行计划,统计数据
on statistics 显示查询结果,统计数据,不显示执行计划
on explain    显示查询结果,执行计划,不显示统计数据
traceonly     显示执行计划和统计结果,但不包括查询结果
traceonly statistics 仅显示统计数据

统计信息的各个参数的意思:
statistics
---------------------------------------------------------
        10 recursive calls
        33 db block gets
11244060 consistent gets
    330674 physical reads
        68 redo size
132579265 bytes sent via SQL*Net to client
   2147396 bytes received via SQL*Net from client
     58033 SQL*Net roundtrips to/from client
         4 sorts (memory)
         1 sorts (disk)
    870466 rows processed

 

recursive Calls. 在用户级和系统级产生的递归调用的数目。Oracle数据库维护用于内部处理的表。当它需要改变那些表时,Oracle数据库生成一个内部SQL语句,该 语句反过来产生一个递归调用。简而言之,因此,如果你必须解析该查询,例如,你可能必须运行一些其他的查询来得到数据字典的信息。这就是递归调用。空间管 理、安全性检查、从SQL中调用PL/SQL,所有这些都会引起递归SQL调用。

 

db block gets. 当前块被请求的次数。当存在时,当前(current)模式块将被立即检索,而不会以一致读的方式检索。通常,查询检索的块如果在查询开始时存在,它们就 被检索。当前模式块如果存在就立即被检索,而不是从一个以前的时间点检索。在一个SELECT期间,你可以看到当前模式检索,因为对于需要进行全面扫描的 表来说,需要读数据字典来找到范围信息(因为你需要"立即"信息,而不是一致读)。在修改期间,为了向块中写入内容,你要以当前模式访问块。

 

consistent gets. 对于一个块一致读被请求的次数。这是你以"一致读"模式处理的块数。为了回滚一个块,这将包括从回滚段读取的块的数目。例如,这是你在SELECT语句中 读取块的模式。当你进行一个指定的UPDATE/DELETE操作时,你也以一致读模式读取块,然后以当前模式获得块以便实际进行修改。

 

physical Reads. 从磁盘读取的数据块的总数。这个数等于"physical reads direct"(物理上直接读取的块数)的值加上读入缓存区的所有块数。

 

redo Size. 所产生的以字节为单位的redo(重做日志)总数。

 

bytes Sent via SQL*Net to Client. 从前台进程发送到客户端的字节总数。一般来说,这是你的结果集的整体大小。

 

bytes Received via SQL*Net from Client. 通过网络从客户端收到的字节总数。一般来说,这是通过网络传输的你的查询的大小。

 

SQL*Net Round-trips to/from Client. 发送到客户端和从客户端接收的网络消息总数。一般来说,这是为了得到回答在你和服务器间发生的交互次数。当你在SQL*Plus中增加ARRAYSIZE 设置值时,你将看到对于返回多条记录的SELECT语句,这个数字会下降(更少的来回交互,因为每获取N条记录是一个来回)。当你减少你的 ARRAYSIZE值时,你将看到这个数字增加。

 

sorts (memory). 完全在内存中执行、且不需要任何磁盘写的排序操作的数目。没有比在内存中排序更好的排序了,除非根本没有排序。排序通常是由表连接SQL操作的选择条件设定所引起的。

 

sorts (disk). 至少需要一次磁盘写的排序操作的次数。需要磁盘输入/输出的排序操作需要耗费大量资源。请试着增加初始化参数SORT_AREA_SIZE的大小。

 

rows Processed. 这是由SELECT语句所返回的或是由INSERT、UPDATE或DELETE语句修改的总行数。

你可能感兴趣的:(oracle,sql,.net)