ITPub博客

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

深入浅出等待事件和性能诊断记载03

原创 Oracle 作者:dotaddjj 时间:2012-01-11 09:58:10 0 删除 编辑

近段时间在忙于年会舞蹈和过年回家的事情,主要是火车票难买,公司的年假又批得迟,搞得俺这些漂泊在外的人纠结啊,学习习惯也有点懒散了,收心!

先摘要记录几个等待事件

Db file sequential read(数据文件顺序读取)是个非常常见的I/O相关的等待事件,通常显示于单个数据块相关读取操作,读取索引块或者通过索引块读取数据块时,可能会记录这个等待事件。

SQL> col name for a20

SQL> col parameter1 for a20

SQL> col parameter2 for a20

SQL> col parameter3 for a20

SQL> col wait_class for a20

SQL> select name,parameter1,parameter2,parameter3,wait_class from v$event_name where name='db file sequential read';

NAME PARAMETER1 PARAMETER2 PARAMETER3 WAIT_CLASS

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

db file sequential r file# block# blocks User I/O

ead

可以通过v$event_name视图发现db file sequential read等待事件的三个参数分别是绝对文件号 文件中开始读取的起始数据块块号以及读取的block数量,在oracle 10g中db file sequential read被划分为user I/O等待事件类。

这个等待事件很可能是:因为多表连接中,表的连接顺序存在问题,没有选择正确的驱动表;或者索引使用并不高效,不是最佳选择,例如读取表中大量数据时,由于索引是单块I/O,读取大量数据选择性并不高,

从oracle 9IR2开始,新增了阶级统计信息收集的新特性v$segment_statistics视图,在oracle 10g中v$segstat_statistics视图收集段级统计信息由oracle9IR2的11类变为15类,可以通过v$segstat_name视图来获取具体统计信息类别,可以查询物理读取显著的索引段或表段,是否采取重建索引 划分分区 存储参数等手段降低其I/O。sql语句消耗在I/O 解析 network三大方面。

Db file scattered read数据文件离散读取,和db file sequential read顺序读取参数意义一样,当这个等待事件比较显著时,很多都是采取了全表扫描,这里可以通过视图v$session_longops动态性能视图记录运行时间超过6秒的事务。

从oracle 9I后,oracle又新增视图v$sql_plan记录当前系统library_cache中sql语句执行计划,例如获得全表扫描的对象和全索引扫描的对象

执行计划是全表扫描的前4行

SQL> select object_owner,object_name,hash_value,address from v$sql_plan where operation='TABLE ACCESS'

2 and options='FULL' and rownum<5;

OBJECT_OWNER OBJECT_NAME HASH_VALUE ADDRESS

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

SYSMAN MGMT_DB_TABLESPACES_ECM 3776970919 1B266B14

SYSMAN MGMT_PERFORMANCE_NAMES 1396966618 25CE1408

执行计划是全索引扫描的前4行

SQL> select object_owner,object_name,hash_value,address from v$sql_plan where operation='INDEX'

2 and options='FULL SCAN' and rownum<5;

OBJECT_OWNER OBJECT_NAME HASH_VALUE ADDRESS

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

SYSTEM LOGMNR_SESSION_PK 1503528053 1AFF0F98

SYS SCHEDULER$_WINGRP_MEMBER_PK 593239587 1B1908A8

SYS SCHEDULER$_WINGRP_MEMBER_PK 593239587 1B1908A8

SYS SCHEDULER$_WINGRP_MEMBER_PK 593239587 1B1908A8

通过v$sql_plan的hash_value和address联合v$sql_text得到完整的sql语句,进而对sql语句进行进一步调优等。

SQL> select sql_text,cost from v$sqltext a,v$sql_plan b

2 where a.hash_value=b.hash_value and b.operation='TABLE ACCESS'

3 and b.options='FULL' and b.object_owner='XIAOYU';

SQL_TEXT COST

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

select * from test18 order by object_id desc 71

select count(*) from test01 2

SELECT * FROM test01 2

SELECT * FROM test18 71

这里梳理一下如何通过等待事件找到相应的sql语句和其执行计划然后对其进行进一步调整。

1 通过v$session_wait视图的等待事件找到sid

2 联合v$session视图通过sid找到sql_address和sql_hash_value

3 联合v$sqltext和v$sql_plan通过address和hash_value进而捕捉到完整的sql语句和执行计划

如果是oracle 10g由于v$session视图中已经添加了event字段,相应的等待事件已经联合到v$session中。

Direct path read/write直接路径读/写

Direct path read通常发生在oracle直接读数据到PGA时,这个读取不需要SGA,直接路径读等待事件的三个参数分别是:file#,file block#和block数量,这类等待事件被归于user I/O

这类读取通常在以下情况:

磁盘排序I/O操作

并行查询从属进程

预读操作

dss系统中,存在大量direct path read是正常的,但是OLTP系统中,通常显著的direct path read代表着系统存在大量的磁盘排序读取操作

direct path write通常发生在oracle直接从PGA写数据到数据文件或临时文件,期间绕过了SGA,direct path write的三个参数和direct path read一样,该等待事件同样被归于user I/O一类

这类写入通常在:

直接路径加载(sql语句直接路径加载,或者sqlldr利用direct=y绕过sga直接从pga到数据文件)

并行dml操作(并行插入时,就会采取绕过sga直接高水位插入)

磁盘排序

对未缓存的lob段写入,会记录为direct path write(lob)等待(对于eygle提出的关于lob等待)还是有颇多疑惑最为常见的是因为磁盘排序引起的。排序是很消耗资源的,而且也建议排序在pga中进行,因为涉及到磁盘效率就会下降很多,对于磁盘排序引起的direct path write等待,应该找到I/O操作频繁的数据文件,很多情况都是临时文件,分散负载加快磁盘I/O,如果是临时表空间引起的也可以采用临时表空间组的方式分散I/O负载。

在oracle 10g中区分特定的对于临时文件的直接读取操作,direct path read temp和direct path write temp

SQL> col name for a40

SQL> select name from v$event_name where name like 'direct%';

NAME

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

direct path read

direct path read temp

direct path write

direct path write temp

[@more@]

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

请登录后发表评论 登录
全部评论
  • 博文量
    220
  • 访问量
    1662975