Oracle的SQL语句执行效率问题查找与解决方法

http://tech.ddvip.com   2007年01月22日    社区交流

本文详细介绍Oracle的SQL语句执行效率问题查找与解决方法

  HASH JOIN在其中一表的连接列上作散列,因此只有另外一个表做排序合并,理论上比SORT JOIN会快些,需要有足够的内存,而且打开了SORT_JOIN_ENABLE参数。(当缺少有用的索引时,哈希连接比嵌套循环连接更加有效。哈希连接可能比排序合并连接更快,因为在这种情况下只有一张源表需要排序。哈希连接也可能比嵌套循环连接更快,因为处理内存中的哈希表比检索B_树索引更加迅速。和排序合并连接、群集连接一样,哈希连接只能用于等价连接。和排序合并连接一样,哈希连接使用内存资源,并且当用于排序内存不足时,会增加临时表空间的I/O(这将使这种连接方法速度变得极慢)。最后,只有基于代价的优化器才可以使用哈希连接。)

  索引连接:

  No2: AUTOTRACE

  •set autotrace 使用步骤:

  1、以system登录

  2、创建plustrace角色; <your_oracle_home>sqlplusadminplustrce.sql

  3、向常规用户授予权限:grant plustrace to <user id>

  4、如果没有plan_table也要创建: <your_oracle_home> dbmsadminutlxplan.sql

  &#8226;set autotrace 选项

  on 显示查询结果,执行计划,统计数据

  on statistics  显示查询结果,统计数据,不显示执行计划

  on explain显示查询结果,执行计划,不显示统计数据

  traceonly 显示执行计划和统计结果,但不包括查询结果

  traceonly statistics  仅显示统计数据

  recursive calls在用户级别和系统级别上生成的递归调用的数量。Oracle维护了一些用于内部处理的表。当oracle需要对这些表进行更改时,它就会在内部生成一个SQL语句,然后这个语句再生成一个递归调用。

  db block gets请求一个CURRENT块的次数

  consistent gets为一块请求consistent read的次数

  physical reads从磁盘读取得数据块总数。这个数量等于“直接物理读取”的值加上读入缓冲区的所有数据块

  redo size生成的重做的总数量(以字节为单位)

  bytes sent via SQL * Net to client从前台进程发送给客户的总字节数

  bytes received via SQL * Net from client通过Oracle Net从客户接收的总字节数

  SQL*Net roundtrips to/from client发送给客户和从客户接收的Oracle Net消息的总数

  sorts (memory)完全在内存中执行并且不需要任何磁盘写入的排序操作的数量

  sorts (disk)至少需要一个磁盘写入的排序操作的数量

  rows processed在操作过程中处理的行数

  四、最后,使用计时特性来测量和比较处理时间

  Set timing on

责编:豆豆技术应用

正在加载评论...