知识大全 ORACLE等待事件监控
Posted 事件
篇首语:历览千载书,时时见遗烈。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 ORACLE等待事件监控相关的知识,希望对你有一定的参考价值。
ORACLE等待事件监控 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!
监控oracle的等待事件
select event
sum(decode(wait_Time )) Prev
sum(decode(wait_Time )) Curr
count(*) Tot
from v$session_Wait
group by event
order by ;
等待事件概述
Oracle的等待事件是衡量oracle运行状况的重要依据及指标
等待事件的概念是在Oracle 中引入的 大致有 个等待事件 在Oracle 中这个数目增加到了大约 个 在Oracle i中大约有 个事件 在Oracle i中大约有 个等待事件
主要有两种类别的等待事件 即空闲(idle)等待事件和非空闲(non idle)等待事件
空闲等待事件是指Oracle正等待某种工作 比如用sqlplus登录之后 但没有进一步发出任何命令 此时该session就处于SQL*Net message from/to client等待事件状态 等待用户发出命令 任何的在诊断和优化数据库的时候 我们不用过多注意这部分事件 非空闲等待事件专门针对Oracle的活动 指数据库任务或应用运行过程中发生的等待 这些等待事件是我们在调整数据库的时候应该关注与研究的
oracle等待事件类型
每一个等待事件都属于某一类 下面给出了每一类等待事件的描述
管理类: administrative
类等待事件是由于DBA的管理命令引起的 这些命令要求用户处于等待状态 比如 重建索引
应用程序类:
此类等待事件是由于用户应用程序的代码引起的(比如 锁等待)
群集类 Cluster
此类等待事件和真正应用群集RAC的资源有关 (比如 gc cr block busy等待事件)
提交确认类 Commit
此类等待事件只包含一种等待事件--在执行了一个mit命令后 等待一个重做日志写确认(也就是log file sync)
并发类 Concurrency
此类等待事件是由内部数据库资源引起的 比如闩锁
配置类 Configuration
此类等待事件是由数据库或实例的不当配置造成的 比如 重做日志文件尺寸太小 共享池的大小等
空闲类 Idle
此类等待事件意味着会话不活跃 等待工作 比如 sql * net messages from client
网络类 Neork
和网络环境相关的一些等待事件 比如sql* net more data to dblink
Other
此类等待事件通常比较少见
调度类 Scheduler
Resource Manager related waits (for example resmgr: bee active )
系统I/O类 System I/O
此类等待事件通过是由后台进程的I/O操作引起的 比如DBWR等待 db file paralle write
用户I/O类 User I/O
此类等待事件通常是由用户I/O操作引起的 比如db file sequential read
等待事件详细描述
db file scattered read (DB文件分散读取)
这种情况通常与全表扫描相关 当数据库进行全表扫描时 基于性能的考虑 数据会分散(scattered)读入buffer cache 如果这个等待事件比较显著 可能考虑查看对应的表有没有创建合适的索引
然而这个等待事件并不一定就意味着性能低下 在某些条件下oracle会主动使用全表扫描来替换索引扫描以提高性能 这和访问的数据量有关 在CBO下oracle会进行更为智能的选择 RBO下oracle更倾向于使用索引
因为全表扫描到内存的数据块被置于LRU链表的冷端 所以这些数据块将可能在较短时间内被置换出物理内存 为了避免反复物理IO 对频繁访问的较小的数据表 可以选择把他们cache到内存中
当这个等待时间比较显著时 可以结合v$session_longops动态性能视图来进行诊断 该视图中记录了长时间(运行时间超过 秒)运行的事务 可能很多是全表扫描操作
Column
Datatype
Description
SID
NUMBER
Session identifier
SERIAL#
NUMBER
Session serial number
OPNAME
VARCHAR ( )
Brief description of the operation
TARGET
VARCHAR ( )
The object on which the operation is carried out
TARGET_DESC
VARCHAR ( )
Description of the target
SOFAR
NUMBER
The units of work done so far
TOTALWORK
NUMBER
The total units of work
UNITS
VARCHAR ( )
The units of measurement
START_TIME
DATE
The starting time of operation
LAST_UPDATE_TIME
DATE
Time when statistics last updated
TIME_REMAINING
NUMBER
Estimate (in seconds) of time remaining for the operation to plete
ELAPSED_SECONDS
NUMBER
The number of elapsed seconds from the start of operations
CONTEXT
NUMBER
Context
MESSAGE
VARCHAR ( )
Statistics summary message
USERNAME
VARCHAR ( )
User ID of the user performing the operation
SQL_ADDRESS
RAW( )
Used with the value of the SQL_HASH_VALUE column to identify the SQL statement associated with the operation
SQL_HASH_VALUE
NUMER
Used with the value of the SQL_ADDRESS column to identify the SQL statement associated with the operation
QCSID
NUMBER
Session identifier of the parallel coordinator
db file sequential read(DB 文件顺序读取)
这一事件通常显示与单个数据块相关的读取操作 比如对索引块的读取 如果这个等待事件比较显著 可能表示在多表连接中 表的链接顺序存在问题 可能没有正确的使用驱动表; 或者可能说明不加选择地进行索引
free buffer (释放缓冲区)
这个等待事件表明系统正在等待内存中的可用空间 这说明当前Buffer 中已经没有Free 的内存空间 Free Buffer 等待可能说明DBWR 的写出速度不够 或者磁盘存在严重的竞争 可以需要考虑增加检查点 使用更多的DBWR 进程 或者增加物理磁盘的数量 分散负载 平衡IO
buffer busy(缓冲区忙)
该等待事件表示正在等待一个以unshareable方式使用的缓冲区 或者表示当前正在被读入buffer cache 一般来说Buffer Busy Wait不应大于 % 检查缓冲等待统计部分(或V$WAITSTAT) 看一下等待是否位于段头(Segment Header) 如果是 可以考虑增加自由列表(freelist 对于Oracle i DMT)或者增加freelist groups(在很多时候这个调整是立竿见影的 在 之前 这个freelists参数不能动态修改;在 及以后版本 动态修改 feelists需要设置PATIBLE至少为 )
This view lists block contention statistics This table is only updated when timed statistics are enabled
Column
Datatype
Description
CLASS
VARCHAR ( )
Class of the block
COUNT
NUMBER
Number of waits by this OPERATION for this CLASS of block
TIME
NUMBER
Sum of all wait times for all the waits by this OPERATION for this CLASS of block
select * from V$WAITSTAT
CLASS
COUNT
TIME
data block
undo header
undo block
segment header
file header block
st level bmb
bitmap index block
system undo block
system undo header
unused
bitmap block
save undo header
save undo block
sort block
free list
rd level bmb
nd level bmb
extent map
如果这一等待位于undo header 可以通过增加回滚段(rollback segment)来解决缓冲区的问题 如果等待位于undo block上 我们可能需要检查相关应用 适当减少大规模的一致性读取 或者降低一致性读取(consistent read)的表中的数据密度或者增大DB_CACHE_SIZE
如果等待处于data block 可以考虑将频繁并发访问的表或数据移到另一数据块或者进行更大范围的分布(可以增加pctfree值 扩大数据分布 减少竞争) 以避开这个 热点 数据块 或者可以考虑增加表中的自由列表或使用本地化管理的表空间(Locally Managed Tablespaces)
如果等待处于索引块 应该考虑重建索引 分割索引或使用反向键索引 为了防止与数据块相关的缓冲忙等待 也可以使用较小的块:在这种情况下 单个块中的记录就较少 所以这个块就不是那么 繁忙 ;或者可以设置更大的pctfree 使数据扩大物理分布 减少记录间的热点竞争
在执行DML (insert/update/ delete)时 Oracle向数据块中写入信息 对于多事务并发访问的数据表 关于ITL的竞争和等待可能出现 为了减少这个等待 可以增加 initrans 使用多个ITL槽 在Oracle i 中 引入了一个新概念:ASSM(Segment Space Management Auto) 通过这个新特性Oracle 使用位图来管理空间使用
ASSM 结合LMT 彻底改变了Oracle 的存储机制 位图freelist 能够减轻缓冲区忙等待(buffer busy wait) 这个问题在Oracle i 以前的版本里曾是一个严重的问题
Oracle 宣称ASSM 显著地提高了DML 并发操作的性能 因为(同一个)位图的不同部分可以被同时使用 这样就消除了寻找剩余空间的串行化 根据Oracle 的测试结果 使用位图freelist 会消除所有分段头部(对资源)的争夺 还能获得超快的并发插入操作 在Oracle i 之中 Buffer Busy wait 不再常见!
latch free (latch 释放)
latch是一种低级排队机制 用于保护SGA中共享内存结构 latch就像是一种快速地被获取和释放的内存锁 用于防止共享内存结构被多个用户同时访问 如果latch不可用 就会记录latch释放失败(latch free miss ) 有两种与闩有关的类型:
■ 立刻
■ 可以等待
假如一个进程试图在立刻模式下获得闩 而该闩已经被另外一个进程所持有 如果该闩不能立可用的话 那么该进程就不会为获得该闩而等待 它将继续执行另一个操作
大多数latch问题都与以下操作相关:
没有很好的是用绑定变量(library cache latch) 重作生成问题(redo allocation latch) 缓冲存储竞争问题(cache buffers LRU chain) 以及buffer cache中的存在 热点 块(cache buffers chain)
通常我们说 如果想设计一个失败的系统 不考虑绑定变量 这一个条件就够了 对于异构性强的系统 不使用绑定变量的后果是极其严重的
另外也有一些latch等待与bug有关 应当关注Metalink相关bug的公布及补丁的发布 当latch miss ratios大于 %时 就应当研究这一问题
log buffer space(日志缓冲空间)
当你将日志缓冲(log buffer)产生重做日志的速度比LGWR 的写出速度快 或者是当日志切换(log switch)太慢时 就会发生这种等待 这个等待出现时 通常表明redo log buffer 过小 为解决这个问题 可以考虑增大日志文件的大小 或者增加日志缓冲器的大小
另外一个可能的原因是磁盘I/O 存在瓶颈 可以考虑使用写入速度更快的磁盘 在允许的条件下设置可以考虑使用裸设备来存放日志文件 提高写入效率 在一般的系统中 最低的标准是 不要把日志文件和数据文件存放在一起 因为通常日志文件只写不读 分离存放可以获得性能提升
等待事件相关视图
v$session_wait
这是一个寻找性能瓶颈的关键视图 它提供任何情况下session在数据库中当前正在等待什么(如果session当前什么也没在做 则显示它最后等待的事件)
每一个链接到实例的session都对应一条记录
Column
Datatype
Description
SID
NUMBER
Session identifier
SEQ#
NUMBER
Sequence number that uniquely identifies this wait Incremented for each wait
EVENT
VARCHAR ( )
Resource or event for which the session is waiting session当前正在等待的事件 或者最后一次等待事件
P TEXT
VARCHAR ( )
Description of first additional parameter
P
NUMBER
First additional parameter
P RAW
RAW( )
First additional parameter
P TEXT
VARCHAR ( )
Description of second parameter
P
NUMBER
Second additional parameter
P RAW
RAW( )
Second additional parameter
P TEXT
VARCHAR ( )
Description of third parameter
P
NUMBER
Third additional parameter
P RAW
RAW( )
Third additional parameter
WAIT_TIME
NUMBER
A nonzero value is the session s last wait time A zero value means the session is currently waiting
SECONDS_IN_WAIT
NUMBER
If WAIT_TIME = then SECONDS_IN_WAIT is the seconds spent in the current wait condition If WAIT_TIME > 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
STATE
VARCHAR ( )
Wait state:
· WAITING (the session is currently waiting)
· WAITED UNKNOWN TIME (duration of last wait is unknown)
· WAITED SHORT TIME (last wait < / th of a second)
· > WAITED KNOWN TIME (WAIT_TIME = duration of last wait)
v$session_event
本视图记录了每个session的每一项等待事件 由上文所知v$session_wait显示了session的当前等待事件 而v$sesion_event则记录了session自启动起所有的事件
Column
Datatype
Description
SID
NUMBER
The ID of the session
EVENT
VARCHAR ( )
The name of the wait event
See Also: Appendix A Oracle Wait Events
TOTAL_WAITS
NUMBER
The total number of waits for this event by this session
TOTAL_TIMEOUTS
NUMBER
The total number of timeouts for this event by this session
TIME_WAITED
NUMBER
The total amount of time waited for this event by this session in hundredths of a second
AVERAGE_WAIT
NUMBER
The average amount of time waited for this event by this session in hundredths of a second
MAX_WAIT
NUMBER
The maximum time (in hundredths of a second) waited for this event by this session
查询所有连接的实例的session的相关信息
session总体等待
select a SID a USERNAME a machine a TERMINAL b EVENT b TOTAL_WAITS b TOTAL_TIMEOUTS
from v$session a
V$SESSION_EVENT b
where a SID = b SID
and a status = ACTIVE
and user# > ;
session当前等待
select a SID a USERNAME a machine a TERMINAL b EVENT b WAIT_TIME b SECONDS_IN_WAIT b STATE
from v$session a
V$SESSION_wait b
where a SID = b SID
and a status = ACTIVE
and user# > ;
当前session正在执行语句
select a SID a USERNAME a machine a TERMINAL b PIECE b SQL_TEXT
from v$session a
v$sqltext b
where b ADDRESS = decode(a SQL_HASH_VALUE a PREV_SQL_ADDR a SQL_ADDRESS)
and a status = ACTIVE
and user# >
order by a SQL_ADDRESS b PIECE;
session当前等待
select a SID a USERNAME a machine a TERMINAL c NAME b VALUE
from v$session a
V$SESStat b
v$statname c
where a SID = b SID
and b STATISTIC# = c STATISTIC#
and a status = ACTIVE
and user# >
cha138/Article/program/Oracle/201311/18898相关参考
nullevent不是空事件不是没有等待事件而是Oracle忘记了刚才等待的事件的名字是什么了但保留了该事件的真实情况Oracle的开发人员直到才更新了这些事件名称 那是不是我们每当遇到性能
监控事例的等待 selecteventsum(decode(wait_Time))Prev sum(decode(wait_Time))Currcount(*)Tot fromv$sessi
wait等待事件及其处理方法 dbfilesequentialread 调整SQL增加buffercache加快磁盘读写速度 logfilesync 减少事务提交将redo文件存放于高速硬
脚本说明: 把如下代码加入<body>区域中 <scriptlanguage=javascript> functiondo_totals() d
Oracle监控索引怎么使用 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! Oracle监控索引
监控ORACLE数据库性能 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 前言:
复杂应用环境监控ORACLE数据库性能 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 前言:
怎么监控oracle数据库表和表空间的现状 declare unfnumber; unfbnumber; fsnumber; fsbnumber; fsnumber; fsbnumb
oracle数据库性能监控的SQL的几种情况 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 监控
ORACLE10046事件详解 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! Oracle的事件