Oracle常见的等待事件(二)
2016-08-29 10:55
267 查看
一、Direct path write
这个等待事件和direct path read正好相反,是会话将一些数据从PGA中直接写入到磁盘文件上,而不经过SGA。
这种情况通常发生在:
(1)使用临时表空间排序(内存不足)
(2)数据的直接加载(使用append方式加载数据)
(3)并行DML操作。
这个事件有三个参数:
Descriptor address:一个指针,指向当前会话正在等待的一个direct I/O。
First dba:descriptor address中最旧的一个I/O数据块地址。
BlocK cnt:descriptor address上下文中涉及的有效的buffer数量。
二、Enqueue
Enqueue这个词其实就是lock的另一种描述语。
当我们在WER报告中发现长时间的enqueue等待事件时,说明数据库中出现了阻塞和等待,可以关联AWR报告中的Enqueue activity部分来确定是哪一种锁出现了长时间的等待。
这个等待事件有2个参数:
Name:Enqueue的名称和类型。
Mode:Enqueue的模式。
三、free buffer waits
当一个会话将数据块从磁盘读取到内存中时,它需要到内存中找到空闲的内存空间来存放这些数据块,当内存中没有空闲的空间时,就会产生这个等待;除此之外,还有一种情况就是会话在一致性读的时候,需要构造数据块在某个时刻的钱映像(image),此时需要申请内存来存放这些新构造的数据块,如果内存中无法找到这样的内存块,也不会发生这个等待事件。
当数据库中出现 比较严重的free buffer waits等待事件时,可能的原因是:
(1)data buffer太小,导致空闲空间不够
(2)内存中的脏数据太多,DBWR无法及时将这些脏数据写到磁盘中以释放空间。
这个等待事件包含2个参数:
File#:需要读取的数据块所在的数据文件的文件号。
Block#:需要读取的数据块块号。
四、Library cache lock
这个等待事件发生在不同用户在共享中由于并发操作同一个数据库对象导致的资源争用的时候,比如当一个用户在对一个表做DDL操作时,其他的用户如果要访问这张表,就会发生Library cache lock等待事件,它要一直等到DDL操作完成后,才能继续操作。
这个事件包含四个参数:
Handle address:被加载的对象的地址。
Lock address:锁的地址。
Mode:被加载对象的数据片段。
Namespace:被加载对象在v$db_object_cache视图中namespace名称。
五、Library cache pin
这个等待事件和library cache lock一样是发生在共享池中并发操作引起的事件。通常来讲,如果Oracle要对一些PL/SQL或者视图这样的对象做重新编译,需要将这些对象pin到共享池中。如果此时这个对象被其他的用户特有,就是产生一个library cache pin的等待。
这个等待事件也包含四个参数:
Handle address:被加载的对象的地址。
Lock address:锁的地址。
Mode:被加载对象的数据片段。
Namespace:被加载对象在v$db_object_cache视图中namespace名称。
这个等待事件和direct path read正好相反,是会话将一些数据从PGA中直接写入到磁盘文件上,而不经过SGA。
这种情况通常发生在:
(1)使用临时表空间排序(内存不足)
(2)数据的直接加载(使用append方式加载数据)
(3)并行DML操作。
这个事件有三个参数:
Descriptor address:一个指针,指向当前会话正在等待的一个direct I/O。
First dba:descriptor address中最旧的一个I/O数据块地址。
BlocK cnt:descriptor address上下文中涉及的有效的buffer数量。
二、Enqueue
Enqueue这个词其实就是lock的另一种描述语。
当我们在WER报告中发现长时间的enqueue等待事件时,说明数据库中出现了阻塞和等待,可以关联AWR报告中的Enqueue activity部分来确定是哪一种锁出现了长时间的等待。
这个等待事件有2个参数:
Name:Enqueue的名称和类型。
Mode:Enqueue的模式。
三、free buffer waits
当一个会话将数据块从磁盘读取到内存中时,它需要到内存中找到空闲的内存空间来存放这些数据块,当内存中没有空闲的空间时,就会产生这个等待;除此之外,还有一种情况就是会话在一致性读的时候,需要构造数据块在某个时刻的钱映像(image),此时需要申请内存来存放这些新构造的数据块,如果内存中无法找到这样的内存块,也不会发生这个等待事件。
当数据库中出现 比较严重的free buffer waits等待事件时,可能的原因是:
(1)data buffer太小,导致空闲空间不够
(2)内存中的脏数据太多,DBWR无法及时将这些脏数据写到磁盘中以释放空间。
这个等待事件包含2个参数:
File#:需要读取的数据块所在的数据文件的文件号。
Block#:需要读取的数据块块号。
四、Library cache lock
这个等待事件发生在不同用户在共享中由于并发操作同一个数据库对象导致的资源争用的时候,比如当一个用户在对一个表做DDL操作时,其他的用户如果要访问这张表,就会发生Library cache lock等待事件,它要一直等到DDL操作完成后,才能继续操作。
这个事件包含四个参数:
Handle address:被加载的对象的地址。
Lock address:锁的地址。
Mode:被加载对象的数据片段。
Namespace:被加载对象在v$db_object_cache视图中namespace名称。
五、Library cache pin
这个等待事件和library cache lock一样是发生在共享池中并发操作引起的事件。通常来讲,如果Oracle要对一些PL/SQL或者视图这样的对象做重新编译,需要将这些对象pin到共享池中。如果此时这个对象被其他的用户特有,就是产生一个library cache pin的等待。
这个等待事件也包含四个参数:
Handle address:被加载的对象的地址。
Lock address:锁的地址。
Mode:被加载对象的数据片段。
Namespace:被加载对象在v$db_object_cache视图中namespace名称。
相关文章推荐
- Oracle 常见的33个等待事件
- Oracle 常见等待事件说明
- Oracle 常见的33个等待事件
- Oracle 常见的33个等待事件
- Oracle 常见等待事件说明
- Oracle常见等待事件说明
- Oracle 常见的33个等待事件
- Oracle中常见的33个等待事件小结
- oracle log buffer内部机制以及常见等待事件
- Oracle 常见的33个等待事件
- oracle 常见等待事件及处理方法
- Oracle 常见的33个等待事件
- 转 Oracle 常见的33个等待事件
- Oracle中常见的33个等待事件小结
- Oracle 常见的33个等待事件
- Oracle常见的33个等待事件
- oracle 常见等待事件及处理方法
- Oracle常见等待事件说明
- oracle常见的等待事件
- Oracle 常见的33个等待事件