定义
运行DDL必须请求一个行缓冲锁(Row Cache Lock)来锁住数据字典(Data Dictionary)信息。共享池(Shared Pool)包含来自数据字典的的行缓冲区,以减少磁盘的IO访问,并允许对行进行加锁。数据字典行锁被叫做行缓冲队列锁(Row Cache Enqueue Locks)。这个队列锁结构从共享池中按需求分配,当这些请求在等待并超时,我们就看到了行缓冲队列锁。
分析
每一个行缓冲队列锁都对应一个特定的数据字典对象。这被叫做队列锁类型,并可以在v$rowcache视图中找到。在以下的示例中可以看到队列锁类型和数据字典缓冲中正在进行的操作。
SQL> select PARAMETER,COUNT,GETS,GETMISSES,MODIFICATIONS from v$rowcache;
PARAMETER COUNT GETS GETMISSES MODIFICATIONS
-------------------------------- ---------- ---------- ---------- -------------
dc_free_extents 0 0 0 0
dc_used_extents 0 0 0 0
dc_segments 574 96847 9359 11403
dc_tablespaces 8 40857590 11 0
dc_tablespace_quotas 0 4073 401 4065
dc_files 0 14 14 0
dc_users 36 6573939 45 20
dc_rollback_segments 49 5260997 68 31
dc_objects 606 5074806 9549 7864
dc_global_oids 19 427246 166 0
dc_constraints 10 3430 1276 3430
dc_object_ids 607 6548320 6408 583
dc_sequences 1 1040 452 1040
常见队列锁类型
行缓冲队列锁等待的调优基于每一个队列锁类型的行为,其中常见的有:
DC_SEQUENCES:在使用序列的时候将发生该行缓冲队列锁。调优方式是检查序列是否指定了缓冲选项并确定这个缓冲值可以承受预期的并发insert操作。
DC_USED_EXTENTS和DC_FREE_EXTENTS:该行缓冲队列锁可能在空间管理碰到表空间分裂或者没有足够区大小时发生。调优方法是检查表空间是否分裂了、区大小是否太小或者表空间是人工管理。
DC_TABLESPACES:该行缓冲队列锁会在分配新区是发生。如果区大小设置得过小,程序将经常申请新区,这将导致冲突。调优方法是快速地增加区的数量。
DC_OBJECTS:该行缓冲队列锁会在重编译对象的时候发生。当对象编译时将申请一个排他锁阻塞其他行为。通过检查非法对象和依赖关系来调优。
DC_SEGMENTS:该行缓冲队列锁会在段分配的时候发生,观察持有这个队列锁的会话在做什么。
参考
Row Cache Lock Wait Understood
http://support.confio.com/blog/post/row-cache-lock-wait-understood/24/
Investigate ROW CACHE LOCK
http://surachartopun.com/2009/11/investigate-row-cache-lock.html
分享到:
相关推荐
双缓冲队列的设计与实现,多线程,c语言实现,用于提高程序运行效率
C#版服务端双缓冲队列,采用空间换时间的思想,解决频繁争夺锁之间的时间开销
服务器端双缓冲队列s/c,简单的实现了服务器端的队列实现
高速缓冲存贮器(Cache) 工作过程与工作原理
环形缓冲区读写操作的分析与实现,以及在并发条件下如何控制竞争
无锁缓冲队列
VxWorks操作系统下基于缓冲队列网络通信应用
主要介绍了C++数据结构与算法之双缓存队列实现方法,结合实例形式分析了双缓存队列的原理、实现方法与相关注意事项,需要的朋友可以参考下
1.c++ 开发解码h264模块 2.完成h264视频d的解码 3.接收h264数据存储在封装的缓冲队列中
本程序中分别用数组和链表实现了环形队列,有利于理解环形缓冲区的实现。
清楚打印队列命令 不用重启即可解决打印机 需有管理员权限
1.原创教学视频,基于FIFO(环形缓冲队列)对按键数据进行保存。 2.定时器每隔10ms扫描按键,将按键状态存储再环形队列中,从而实现对按键长短检测,组合按键。 3.创作不易,有问题联系作者本人274688376
可编程路由器中基于缓冲队列长度阈值的处理器调度.pdf
参考STC官方例程,使用自编的库函数进行串口配置。并设计了环形队列作为串口缓冲区,可以方便的移植到其他的处理器上使用。
C语言实现基于数组的环形缓冲队列 ,通过图文简单介绍了缓存的写入和读出,并给出示例代码 在C语言编程场景中,常常需要对一段不定长数据进行缓存。这里提出一种基于数组的环形缓冲队列,解决上述场景的问题。 原理...
利用实时操作系统 VxWorks对多任务的良好支持,本文提出了一种基于缓冲队列的网络通信模式,并添加了网络状态监测功能,使系统能够快速的对网络断线等故障做出响应,提高了网络通信的稳定性和可靠性。
从项目中剥离,通信类接收数据时采用循环队列的方式。此工程在STM32F103ZET6上运行。开发环境为Keil for ARM 5.10
一种基于缓冲队列的页面树形数据获取装置及方法.pdf一种基于缓冲队列的页面树形数据获取装置及方法.pdf一种基于缓冲队列的页面树形数据获取装置及方法.pdf一种基于缓冲队列的页面树形数据获取装置及方法.pdf一种基于...
行业分类-设备装置-一种对缓冲队列并发执行读、写访问的方法和设备