本文内容
- Latch 和等待
- 共享池中的 Latch 争用
Latch 和等待
假设,一个数据块正在被一个会话从磁盘中读如到内存中,请注意,是正在读取中,此时,如果另外一个会话也正需要这个数据块,他该怎么办?
此时,丈等待这个数据块被读取到内存中,这样就可以只有一个数据块在内存中,不会导致数据的不一致性。那么,正在读取数据块的会话如何能阻止别的会话继续读取这个数据块呢?方法是它需要获得一种像锁一样的资源,以便阻止其他的会话来做相同的事情,这种资源就叫 Latch。Latch 是 Oracle 为了保护内存结构而产生。
Latch 不会造成阻塞,只会导致等待。导致 Latch 争用而等待的原因很多,内存中很多资源都可能存在争用。最常见的两类 Latch 争用:
- 共享池中的 Latch 争用
- 数据缓冲池中的 Latch 争用
共享池中的 Latch 争用
创建测试环境
用 sys 用户登录,查看 Latch 争用情况:
'library cache%';
LATCH# NAME HASH
---------- -------------------------------------------------- ----------
278 library cache load lock 2952162927
SQL>