Oracle中常见的33个等待事件小结(五)

2015-04-07 14:09:48 · 作者: · 浏览: 173
name like 'latch%' order by 1;


?NAME
?--------------------------------------------------
?latch activity
?latch free
?latch: Change Notification Hash table latch
?latch: In memory undo latch
?latch: KCL gc element parent latch
?latch: MQL Tracking Latch
?latch: Undo Hint Latch
?latch: cache buffer handles
?latch: cache buffers chains
?latch: cache buffers lru chain
?latch: checkpoint queue latch
?latch: enqueue hash chains
?latch: gcs resource hash
?latch: ges resource hash list
?latch: library cache
?latch: library cache lock
?latch: library cache pin
?latch: messages
?latch: object queue header heap
?latch: object queue header operation
?latch: parallel query alloc buffer
?latch: redo allocation
?latch: redo copy
?latch: redo writing
?latch: row cache objects
?latch: session allocation
?latch: shared pool
?latch: undo global data
?latch: virtual circuit queues


?29 rows selected.


?
所以latch free 等待事件在10g以后的版本中并不常见,而是以具体的Latch 等待事件出现。


?这个等待事件有三个参数:
Address: 会话等待的latch 地址。
Number: latch号,通过这个号,可以从v$latchname 视图中找到这个latch 的相关的信息。
SQL> select * from v$latchname where latch#=number;
?Tries: 会话尝试获取Latch 的次数。


?
15. Library cache lock
这个等待事件发生在不同用户在共享中由于并发操作同一个数据库对象导致的资源争用的时候,比如当一个用户正在对一个表做DDL 操作时,其他的用户如果要访问这张表,就会发生library cache lock等待事件,它要一直等到DDL操作完成后,才能继续操作。


?这个事件包含四个参数:
Handle address: 被加载的对象的地址。
Lock address: 锁的地址。
Mode: 被加载对象的数据片段。
Namespace: 被加载对象在v$db_object_cache 视图中namespace名称。


10gr2 rac:
?sys@ORCL> select name from v$event_name where name like 'library%' order by 1;


?NAME
?--------------------------------------------------
?library cache load lock
?library cache lock
?library cache pin
?library cache reva lidation
?library cache shutdown


?
?16. Library cache pin
这个等待事件和library cache lock 一样是发生在共享池中并发操作引起的事件。通常来讲,如果Oracle 要对一些PL/SQL 或者视图这样的对象做重新编译,需要将这些对象pin到共享池中。如果此时这个对象被其他的用户特有,就会产生一个library cache pin的等待。


?这个等待事件也包含四个参数:
Handle address: 被加载的对象的地址。
Lock address: 锁的地址。
Mode: 被加载对象的数据片段。
Namespace: 被加载对象在v$db_object_cache 视图中namespace名称。


?
17. Log file parallel write
后台进程LGWR 负责将log buffer当中的数据写到REDO 文件中,以重用log buffer的数据。如果每个REDO LOG组里面有2个以上的成员,那么LGWR进程会并行地将REDO 信息写入这些文件中。


?如果数据库中出现这个等待事件的瓶颈,主要的原因可能是磁盘I/O性能不够或者REDO 文件的分布导致了I/O争用,比如同一个组的REDO 成员文件放在相同的磁盘上。


?这个等待事件有三个参数:
Files: 操作需要写入的文件个数。
Blocks: 操作需要写入的数据块个数。
Requests:操作需要执行的I/O次数。


?
18. Log buffer space
当log buffer 中没有可用空间来存放新产生的redo log数据时,就会发生log buffer space等待事件。如果数据库中新产生的redo log的数量大于LGWR 写入到磁盘中的redo log 数量,必须等待LGWR 完成写入磁盘的操作,LGWR必须确保redo log写到磁盘成功之后,才能在redo buffer当中重用这部分信息。


?如果数据库中出现大量的log buffer space等待事件,可以考虑如下方法:
?(1)增加redo buffer的大小。
?(2)提升磁盘的I/O性能


19. Log file sequential read
这个等待事件通常发生在对redo log信息进行读取时,比如在线redo 的归档操作,ARCH进程需要读取redo log的信息,由于redo log的信息是顺序写入的,所以在读取时也是按照顺序的方式来读取的。


?这个等待事件包含三个参数:
Log#: 发生等待时读取的redo log的sequence号。
Block#: 读取的数据块号。
Blocks: 读取的数据块个数。


?
20. Log file single write
这个等待事件发生在更新redo log文件的文件头时,当为日志组增加新的日志成员时或者redo log的sequence号改变时,LGWR 都会更新redo log文件头信息。


?这个等待事件包含三个参数:
Log#: 写入的redo log组的编号。
Block#:写入的数据块号。
Blocks:写入的数据块个数。


?
21. Log file switch(archiving needed)
在归档模式下,这个等待事件发生在在线日志切换(log file switch)时,需要切换的在线日志还没有被归档进程(ARCH)归档完毕的时候。 当在线日志文件切换到下一个日志时,需要确保下一个日志文件已经被归档进程归档完毕,否则不允许覆盖那个在线日志信息(否则会导致归档日志信息不完整)。


?出现这样的等待事件通常是由于某种原因导致ARCH 进程死掉,比如ARCH进程尝试向目的地写入一个归档文件,但是没有成功(介质失效或者其他原因),这时ARCH进程就会死掉。 如果发生这种情况,在数据库的alert log文件中可以找到相关的错误信息。


?这个等待事件没有参数。


?
22. Log file switch(checkpoint incomplet