行缓冲队列锁(Row Cache Lock Wait)

[b]定义[/b]
运行DDL必须请求一个行缓冲锁(Row Cache Lock)来锁住数据字典(Data Dictionary)信息。共享池(Shared Pool)包含来自数据字典的的行缓冲区,以减少磁盘的IO访问,并允许对行进行加锁。数据字典行锁被叫做行缓冲队列锁(Row Cache Enqueue Locks)。这个队列锁结构从共享池中按需求分配,当这些请求在等待并超时,我们就看到了行缓冲队列锁。

[b]分析[/b]
每一个行缓冲队列锁都对应一个特定的数据字典对象。这被叫做队列锁类型,并可以在v$rowcache视图中找到。在以下的示例中可以看到队列锁类型和数据字典缓冲中正在进行的操作。
[code]
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
[/code]
[b]常见队列锁类型[/b]
行缓冲队列锁等待的调优基于每一个队列锁类型的行为,其中常见的有:
DC_SEQUENCES:在使用序列的时候将发生该行缓冲队列锁。调优方式是检查序列是否指定了缓冲选项并确定这个缓冲值可以承受预期的并发insert操作。
DC_USED_EXTENTS和DC_FREE_EXTENTS:该行缓冲队列锁可能在空间管理碰到表空间分裂或者没有足够区大小时发生。调优方法是检查表空间是否分裂了、区大小是否太小或者表空间是人工管理。
DC_TABLESPACES:该行缓冲队列锁会在分配新区是发生。如果区大小设置得过小,程序将经常申请新区,这将导致冲突。调优方法是快速地增加区的数量。
DC_OBJECTS:该行缓冲队列锁会在重编译对象的时候发生。当对象编译时将申请一个排他锁阻塞其他行为。通过检查非法对象和依赖关系来调优。
DC_SEGMENTS:该行缓冲队列锁会在段分配的时候发生,观察持有这个队列锁的会话在做什么。

[b]参考[/b]
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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值