Oracle 10g数据库中如何分析响应时间(3)

2020-06-05 12:15

wait_event,

sess_time,

round(100 * (sess_time / total_time),2) pct_time_waited

from

(select a.session_id sess_id,

decode(session_type,'background',session_type,c.username) username,

a.program program,

b.name wait_event,

sum(a.time_waited) sess_time

from sys.v_$active_session_history a,

sys.v_$event_name b,

sys.dba_users c

where a.event# = b.event# and

a.user_id = c.user_id and

sample_time > '22-JAN-07 12:00:00 AM' and

sample_time < '22-JAN-07 05:00:00 AM' and

b.wait_class = 'User I/O'

group by a.session_id,

decode(session_type,'background',session_type,c.username),

a.program,

b.name),

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旗舰数据库中已经把许多的响应时间数据做成了动态性能视图。这些统计信息将有助于迅速找出大型复杂数据库中的性能瓶颈所在。


Oracle 10g数据库中如何分析响应时间(3).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:分管后勤和安全副校长述职述廉报告

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: