Oracle研发工程师为了保证Cache Fusion的各个实例一致性使用了超过70种的队列锁,12.2版本有超过90种队列。比如我们常见的HW,US,TX,TM,SS,LB等等。每一个版本的队列信息可以通过Oracle提供的v$lock进行查看。比如我们最常用的11gR2的版本展示 : https://docs.oracle.com/cd/E11882_01/server.112/e40402/dynviews_2027.htm 。
![760f88f0668184ac9fe559ad988c8f20.png](https://i-blog.csdnimg.cn/blog_migrate/ce2914e4a4d11cc85e12766178e0dfef.jpeg)
Oracle的使用的队列大致可以分为三种类型:
1. 实例类:比如实例启动和恢复,SCN同步;
2. 事务类:比如library cache,dictionary cache,并行查询。
3. 用户类:用户自定义的队列(enq:UL-contention)
队列结构
当会话需要访问指定资源的时候,就需要获得锁结构(ksqlk),请求以特定锁模式获得对资源的访问。锁请求的锁结构属于如下三个链表之一(所有者,等待者和转换者)。可以根据v$lock视图的LMODE列和REQUEST列区分所有者,等待者还是转换者。平均等待时间可以通过v$enqueue_stat的cum_wait_time/total_wait#计算得到,单位为千分之一秒。