latch free 等待事件:
latch: cache buffers chains 这个等待事件其实还有另外一个重要的原因,那么就是逻辑读太高,SQL执行计划走错了导致的。
当进程想要获取锁存器而此时该锁存器整被其他进程持有时产生latch free(锁存器空闲)等待事件,类似于排队,Oracle
使用锁存器来保护数据结构。一次只能在一个进程来获得锁存器后修改或检查数据结构。其他需要访问该数据结构的进程必须等到
它们获得锁存器后。不同于排队的是,请求锁存器的进程不需要在对列中等待。如果获取锁存器的请求失败,则进程仅仅等待一小段
时间就可以再次请求锁存器。这一小段等待时间称为"自旋"(spin)。如果在一次或多次自旋重复(spin itertions)之后没有获取锁存器,
进程就休眠一小段时间,然后再次尝试获取锁存器,接下来休眠更长一段时间直到获得锁存器。
最常见的latch: cache buffer chains,library cache,shared pool
library cache pin(库高速缓存pin)等待事件与库高速缓存并发性有关,当会话尝试在库高速缓存中钉住对象以修改或检查
该对象时产生该事件,会话必须获取插针(pin)以确保此时对象没有被其他会话更新,当会话正在编译或分析PL/SQL过程和视图时,Oracle提交该事件。
library cache lock(库高速缓存锁)等待事件也与高速缓存并发性有关,当会话尝试在库
高速缓存中修改或检查给定对象时产生该事件。会话必须获取对象句柄的库高速缓存锁,以阻止其他会话
同时访问它,或维持一段较长事件的依赖性,或在库高速缓存中给对象定位。