Oracle 10g数据库中如何分析响应时间 (3) SQL语句响应时间分析 在Oracle9i数据库中查看SQL语句的响应时间就变得比较容易了,现在在Oracle10g中,DBA们拥有更多的工具可以帮助他们跟踪效率低下的数据库代码。以前可以用来查询的视图是V$SQLAREA,从Oracle9i开始,这个视图增加了ELAPSED_TIME和CPU_TIME两个列,这极大的有助于去确定实际用户的SQL语句的执行经历。(如果除以执行的次数列EXECUTIONS,那么将得到平均每次执行这个SQL语句所用的平均时间)在Oracle10g数据库中,V$SQLAREA视图中增加了6个新的和等待以及时间相关的列: APPLICATION_WAIT_TIME CONCURRENCY_WAIT_TIME CLUSTER_WAIT_TIME USER_IO_WAIT_TIME PLSQL_EXEC_TIME JAVA_EXEC_TIME 这些新的列有助于确定很多信息,例如:一个存储过程中花费在PL/SQL代码和标准SQL执行上的时间的对比,以及一个SQL语句经历的任何详细的用户I/O等待。例如:下面的SQL语句能帮助找到前5位用户I/O等待最高的SQL语句: select * from (select sql_text, sql_id, elapsed_time, cpu_time, user_io_wait_time from sys.v_$sqlarea order by 5 desc) where rownum < 6; SQL_TEXT SQL_ID ELAPSED_TIME CPU_TIME USER_IO_WAIT_TIME DECLARE job BINARY_INTEGER := :job; next_date DATE := :mydate; broken BOOLEAN : 6gvch1xu9ca3g 11077912 747091 8593479 select /*+ index(idl_ub1$ i_idl_ub11) +*/ piece#, length,piece from idl_ub1 $ wher cvn54b7yz0s8u 6455976 220128 6427409 select s.synonym_name object_name, o.object_type from sys.all_synonyms s, s fqmpmkfr6pqyk 11814078 6958760 3189450 select /*+ rule */ bucket, endpoint, col#, epvalue from histgrm$ where obj#=:1 a db78fxqxwxt7r 2737680 193937 2689611 select /*+ index(idl_ub2$ i_idl_ub21) +*/ piece#, length,piece from idl_ub2$ where 39m4sx9k63ba2 2322664 108100 2307700 当然,获取最消耗时间或者等待时间最长的SQL语句非常不错,但是同时也需要抓住其要点——在V$ACTIVE_SESSION_HISTORY视图中又一次出现的SQL语句。通过这个视图,能够找出具体什么等待时间延迟了SQL语句执行,连同实际的文件,对象以及阻塞的对象导致等待。 例如:设想已经找到一个特别的SQL语句,看上去在用户I/O等待时间方面极端的严重,那么可以执行下面的查询来得到等待时间中各个单独的等待事件,等待的文件,等待的对象: select event, time_waited, owner, object_name, current_file#, current_block# from sys.v_$active_session_history a, sys.dba_objects b where sql_id = '6gvch1xu9ca3g' and a.current_obj# = b.object_id and time_waited <> 0; EVENT TIME_WAITED OWNER OBJECT_NAME file block db file sequential read 27665 SYSMAN MGMT_METRICS_1HOUR_PK 3 29438 db file sequential read 3985 SYSMAN SEVERITY_PRIMARY_KEY 3 52877 当然,也可以通过使用V$ACTIVE_SESSION_HISTORY视图中的历史数据的方式来限制一段特殊时间内的没有优化的SQL语句。问题在于Oracle10g数据库通过简化的数据字典视图把SQL语句的响应时间分析变得非常的简单,比起以前运用消耗时间的trace方法来说。 总结 DBA们和性能分析专家们管理Oracle10g数据库的性能时会发现在最新的Oracle旗舰数据库中已经把许多的响应时间数据做成了动态性能视图。这些统计信息将有助于迅速找出大型复杂数据库中的性能瓶颈所在。