`
beagoodboy
  • 浏览: 95872 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
文章分类
社区版块
存档分类
最新评论

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

阅读更多
定义
运行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

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics