1.通过操作系统的命令找到系统资源的bottleneck,如:CPU, Memory, I/O, Network
  同时主要关注IOWait, PI/PO, Memory的使用情况

2.通过查询v$sys_time_model来观察系统整体在基于time的标准上整体的运行状况.
SQL> select * from v$sys_time_model;

STAT_ID STAT_NAME                           VALUE
---------- ------------------------------ ----------
3649082374 DB time                        9772556023
2748282437 DB CPU                            6045546
4157170894 background elapsed time          94505855
2451517896 background cpu time              22728949
4127043053 sequence load elapsed time           4797
1431595225 parse time elapsed               16369523
 372226525 hard parse elapsed time          15624250
2821698184 execute elapsed time       9780485995
1990024365 connection management call ela     333283
           psed time

1824284809 failed parse elapsed time            1633
4125607023 failed parse (out of shared me          0
           mory) elapsed time

3138706091 hard parse (sharing criteria)      294918
           elapsed time

268357648 hard parse (bind mismatch) ela        412
           psed time

2643905994 PL/SQL execution elapsed time     2007111
 290749718 inbound PL/SQL rpc elapsed tim          0
           e

1311180441 PL/SQL compilation elapsed tim     910380
           e

751169994 Java execution elapsed time             0
1159091985 repeated bind elapsed time          24014
2411117902 RMAN cpu time (backup/restore)          0

这里我们看到在DB time中大部分的时间花在了sql execute elapsed time指标上,记录下stat_id=2821698184

3.查询v$sess_time_model视图来获得具体的session等待信息.
SQL> select sid,stat_name,value from v$sess_time_model where stat_id=2821698184;

SID STAT_NAME                           VALUE
---------- ------------------------------ ----------
       144 sql execute elapsed time       7122395220
       146 sql execute elapsed time                0
       148 sql execute elapsed time                0
       150 sql execute elapsed time            53570
       151 sql execute elapsed time             1387
       155 sql execute elapsed time                0
       158 sql execute elapsed time                0
       160 sql execute elapsed time                0
       161 sql execute elapsed time                0
       162 sql execute elapsed time                0
       163 sql execute elapsed time                0
       164 sql execute elapsed time                0
       165 sql execute elapsed time                0
       166 sql execute elapsed time                0
       167 sql execute elapsed time                0
       168 sql execute elapsed time                0
       169 sql execute elapsed time                0
       170 sql execute elapsed time                0

这里我们又可以看到,大部分的时间花在了sid=144这个session中。执行时间=7122395220(微秒)
这么长的执行时间,看看是否有等待发生

4.查询v$session或v$session_wait视图来获得实际的执行事件event信息。
SQL> select sid,event,wait_time,seconds_in_wait,state,wait_class from v$session_
wait where sid=144;

SID EVENT                                                             WAI
T_TIME SECONDS_IN_WAIT STATE               WAIT_CLASS
---------- ---------------------------------------------------------------- ----
------ --------------- ------------------- -------------------------------------
---------------------------
       144 enq: TX - row lock contention
     0            7123 WAITING             Application

可以得知session 144正在经历着锁等待的事件。
wait_time 表示: A zero value means the session is currently waiting.
seconds_in_wait 表示: If WAIT_TIME = 0, then SECONDS_IN_WAIT is the seconds spent in the current wait condition. If WAIT_TIME > 0, then SECONDS_IN_WAIT is the seconds since the start of the last wait, and SECONDS_IN_WAIT - WAIT_TIME is the active seconds since the last wait ended

当然也可以查询v$session_wait_class来查询具体的wait_class信息:
SQL> select wait_class_id,wait_class,total_waits,time_waited from v$session_wait
_class
  2  where sid=144;

WAIT_CLASS_ID WAIT_CLASS                                                       T
OTAL_WAITS TIME_WAITED
------------- ---------------------------------------------------------------- -
---------- -----------
   1893977003 Other
         2           0
   4217450380 Application
      2670      799742
   3386400367 Commit
         3           0
   2723168908 Idle
        37       13313
   2000153315 Network
        37           0
   1740759767 User I/O
        68          29

5.找到占用系统资源特别大的Oracle的Session及执行的SQL语句。

利用系统进程的PID
-----------------
select a.username,a.machine,a.program,a.sid,a.serial#,a.status,c.piece,c.sql_text from v$session a, v$process b,v$sqltext c

where b.spid=&pid and b.addr=a.paddr and a.sql_address=c.address(+) order by c.piece;
在Oracle10g中,我们可以普遍采用SQL_ID来代替sql_address等信息了

利用Oracle Session的SID
-----------------------
select sid,sql_text from v$session s,v$sql q
where sid = 144 and (q.sql_id=s.sql_id or q.sql_id = s.prev_sql_id);

查询Top 10 SQL
--------------
select * from
(select parsing_user_id,executions,sorts,command_type,disk_reads,sql_text from v$sqlarea
order by disk_reads desc) where rownum < 10;

查询I/O消耗过多的SQL
---------------------
SELECT se.sid,se.serial#,pr.SPID,se.username,se.status,se.terminal,se.program,se.MODULE, se.sql_address,st.event,st.p1text,si.physical_reads,si.block_changes
FROM v$session se, v$session_wait st,v$sess_io si,v$process pr
WHERE st.sid=se.sid AND st.sid=si.sid
AND se.PADDR=pr.ADDR
AND se.sid>6
AND st.wait_time=0
ORDER BY physical_reads DESC

查询出SID后,获得实际的SQL Text
select sql_address from v$session where sid=&sid;
select * from v$sqltext where address=&address;

6.针对SQL做相应的优化

【参考】查找Oracle最高的几个等待事件以及锁的信息的更多相关文章

  1. Oracle 常见的33个等待事件

    一. 等待事件的相关知识: 1.1 等待事件主要可以分为两类,即空闲(IDLE)等待事件和非空闲(NON-IDLE)等待事件. 1). 空闲等待事件指Oracle正等待某种工作,在诊断和优化数据库的时 ...

  2. Oracle常见的几种等待事件

    1. CPU time CPU time其实不是真正的等待事件.是衡量CPU是否瓶颈的一个重要指标.一般来讲,一个良好的系统,CPU TIME 应该排在TOP 5 TIME Event的最前面. 当然 ...

  3. oracle 11g enq: JI – contention等待事件

    最近使用物化视图同步的环境在大量刷新的时候频繁出现enq: JI – contention等待事件,经查: JI enqueue is acquired in exclusive mode on th ...

  4. Oracle 11g direct path read 等待事件的理解

    在Oracle 11g中,全表扫描可能使用direct path read方式,绕过buffer cache,这样的全表扫描就是物理读了. 在10g中,都是通过gc buffer来读的,所以不存在di ...

  5. Oracle常见的33个等待事件

    Buffer busy waits 原因:        当一个会话试图修改一个数据块,但这个数据块正在被另一个会话修改时.        当一个会话需要读取一个数据块,但这个数据块正在被另一个会话读 ...

  6. 查看历史会话等待事件对应的session信息

    此处以enq: TX - row lock contention等待时间为例. 查看snap_id对应时间 select to_char(s.startup_time,'dd Mon "at ...

  7. Oracle Tuning 基础概述01 - Oracle 常见等待事件

    对Oracle数据库整体性能的优化,首先要关注的是在有性能问题时数据库排名前几位等待事件是哪些.Oracle等待事件众多,随着版本的升级,数量还在不断增加,可以通过v$event_name查到当前数据 ...

  8. 全面解析Oracle等待事件的分类、发现及优化

    一.等待事件由来 大家可能有些奇怪,为什么说等待事件,先谈到了指标体系.其实,正是因为指标体系的发展,才导致等待事件的引入.总结一下,Oracle的指标体系,大致经历了下面三个阶段: · 以命中率为主 ...

  9. oracle之 等待事件LOG FILE SYNC (awr)优化

    log file sycn是ORACLE里最普遍的等待事件之一,一般log file sycn的等待时间都非常短 1-5ms,不会有什么问题,但是一旦出问题,往往都比较难解决.什么时候会产生log f ...

随机推荐

  1. Spark的数据存储(十九)

    Spark本身是基于内存计算的架构,数据的存储也主要分为内存和磁盘两个路径.Spark本身则根据存储位置.是否可序列化和副本数目这几个要素将数据存储分为多种存储级别.此外还可选择使用Tachyon来管 ...

  2. C# 正则表达式

    C# 正则表达式 正则表达式 是一种匹配输入文本的模式..Net 框架提供了允许这种匹配的正则表达式引擎.模式由一个或多个字符.运算符和结构组成. 定义正则表达式 下面列出了用于定义正则表达式的各种类 ...

  3. redis模拟消息订阅

    使用办法: 订阅端: Subscribe 频道名称 发布端: publish 频道名称 发布内容 客户端例子: redis 127.0.0.1:6379> subscribe news Read ...

  4. Log4Net快速配置

    1. Log4NET的概念: a) 级别:trace.debug.info.warn.error.fatal.常用debug(调试信息,程序员临时跟踪执行,在正式运行的项目中应该不显示):warn(警 ...

  5. ZBrush如何把不同材质赋予同一个模型上

    ZBrush 作为最专业的数字雕刻与绘画软件,能够制作出高质量的3D模型,包括模型的颜色贴图和材质属性.不同材质可以改变照明在表面上的反应,以便模型表现出光泽.凹凸.反射.金属性或透明效果.ZBrus ...

  6. struts2配置 匹配原则 配置各项默认

    struts开发流程 1,引入jar包 2,配置web.xml 3,开发action类 4,配置struts.xml   版本: 2.3 引入jar文件 commons-fileupload-1.2. ...

  7. Python IDE和编辑器

    1.什么是IDE? IDE也就是集成开发环境,较常用的有PyCharm 2.编辑器 (1)Sublime Text Sublime Text 具有漂亮的用户界面和强大的功能,例如代码缩略图,Pytho ...

  8. PHP内置SOAP扩展客户端的使用例子

    SOAP已经是属于OUT范畴的技术了,不过因为历史原因,时不时还是会用到它,以前都是用NuSOAP,现在准备试试PHP内置的SOAP扩展.由于文本只打算说说客户端的用法,所以得先找一些能直接用的服务端 ...

  9. dataTable 动态列 二次加载

    需要把 列头和表格内容全部清空 if ($('#datatable').hasClass('dataTable')) { var dttable = $('#datatable').dataTable ...

  10. layui select change

    <select lay-filter="test"></select> layui.use([ 'form'], function() { var form ...