首页 > 数据库 > Oracle > 深入浅出等待事件和性能诊断01
最近都在培训舞蹈,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/ ,如需转载,请注明出处,否则将追究法律责任。