ITPub博客

首页 > 数据库 > Oracle > 深入浅出等待事件和性能诊断01

深入浅出等待事件和性能诊断01

原创 Oracle 作者:dotaddjj 时间:2012-01-06 22:10:19 0 删除 编辑

最近都在培训舞蹈,oracle和os上很久没有去看了,年底也快忙完了电还是要冲的,还是回归oracle世界吧!终于算是初步把eygle的深入浅出全部读完了,就深入浅出的最后两章等待事件和sql性能诊断方面记载一二。

数据库性能瓶颈方面,可能第一反应便是oracle的等待事件,而v$event_name视图记录了当前数据库支持的等待事件及其基本信息,parameter1,parameter2,parameter3对于不同的等待事件的意思各不相同。

Oracle等待事件分为:既空闲idle等待事件和非空闲non-idle等待事件。空闲等待事件指oracle正等待某种工作,在诊断和优化数据库的时候,不用过多注意,stat$idle_event视图记录的则是空闲等待事件。非空闲等待事件专门针对oracle活动,指数据库任务或应用运行过程中发生的等待,当然这些等待需要关注于 研究调整。

可以通过v$event_name视图查看各类等待事件

SQL> col wait_class for a20;

SQL> select wait_class,wait_class#,wait_class_id,count(*) from v$event_name group by wait_class,wait_class#,wait_class_id;

WAIT_CLASS WAIT_CLASS# WAIT_CLASS_ID COUNT(*)

-------------------- ----------- ------------- ----------

Idle 6 2723168908 62

Cluster 11 3871361733 47

Administrative 3 4166625743 46

Scheduler 10 2396326234 2

System I/O 9 4108307767 24

Concurrency 4 3875070507 24

Configuration 2 3290255840 23

Other 0 1893977003 588

Application 1 4217450380 12

Network 7 2000153315 26

User I/O 8 1740759767 17

Commit 5 3386400367 1

12 rows selected

同样也可以查看v$system_wait_class视图获得各类主要等待事件的等待事件和等待次数信息

SQL> select * from v$system_wait_class;

WAIT_CLASS_ID WAIT_CLASS# WAIT_CLASS TOTAL_WAITS TIME_WAITED

------------- ----------- -------------------- ----------- -----------

1893977003 0 Other 1468 3654

4217450380 1 Application 2819 86

3290255840 2 Configuration 2 82

3875070507 4 Concurrency 490 2639

3386400367 5 Commit 3306 2420

2723168908 6 Idle 203983 72024430

2000153315 7 Network 46096 37

1740759767 8 User I/O 9609 40303

4108307767 9 System I/O 45639 14443

9 rows selected

V$session和v$session_wait

在关注oracle的性能,这两个视图经常被应用,从oracle 10gR1中,v$session中增加了关于等待事件的字段,实际上也就是把v$session_wait视图中的所有字段全部整合到v$session视图中。V$session中的event,P1TEXT描述具体参数,P1代表十进制定义的参数,p1raw十六进制表示的参数值等,又增加了service_name,sql_trace,sql_trace_waits和sql_trace_binds,显示了当前session连接方式及是否启用sql_trace跟踪。由于v$session记录的是动态信息,随着session的生命周期相关,oracle又提供了另一个视图v$system_event记录数据库自启动以来的所有等待事件信息。

这里说一下关于db file scattered read等待事件而查询相应的session的sql语句,找到问题根本。

select a.sql_text

from v$sqltext a where (a.hash_value,a.address) in (select b.sql_hash_value,sql_address

from v$session b

where b.sid=&sid);

这里先从v$session_wait找到相关等待事件的sid,然后通过联合v$session视图进而获得v$session视图的sql_hash_value,sql_address最后联合v$sqltext找到等待事件的session的sql语句,进而运用10046,sql_trace或autotrace查看相应的sql语句进而调整。

[@more@]

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/25362835/viewspace-1057059/ ,如需转载,请注明出处,否则将追究法律责任。

上一篇: 2011年初识oracle
请登录后发表评论 登录
全部评论
  • 博文量
    220
  • 访问量
    1662995