当前位置: 首页 > Oracle, oracle 10g, oracle 11g > 正文

AWR分析之DFS lock handle等待事件

在给客户巡检时发现DFS lock handle等待事件。

2015-11-06-00001

在RAC环境中,会话等待获取一个全局锁的句柄时产生DFS lock handle等待事件,这个等待事件通常和sequence有关,如果2个实例都有并发的session使用sequence,这时有可能遭遇 DFS LOCK HANDLE等待事件。

ORACLE为了在RAC环境下为了sequence的一致性,使用了三种锁:row cache lock、SQ锁、SV锁。

row cache lock:在调用sequence.nextval过程中,将数据字典信息进行物理修改时获取,赋予了nocache属性的sequence上有可能会发生,目的是在sequence指定nocache的情况下调用sequence.nextval过程中保证序列的顺序性。

SQ锁:在内存上缓存(cache)范围内,调用sequence.nextval期间拥有此锁,赋予了cache+noorder 属性的sequence上可能会发生。当多个用户同时访问一个sequence的时候,是在oracle SGA中读取sequence当前的合理数值(cache范围内的值),如果并发访问太大,cache的大小不够,那么就会产生sequence cache相关的等待事件enq: SQ – contention。

SV锁:RAC上节点之间如果要保障sequence的顺序,必须给sequence赋予cache+order属性,调用sequence.nextval期间有可能会发生DFS lock handle等待事件。

若没有给sequence赋予ORDER属性,则各节点将会把不同范围的Sequence值CACHE到内存上,比如拥有两个节点的RAC环境下,创建CACHE值为20的 sequence时,1节点会使用1-20,2节点会使用21-40。 使用时从各自节点取sequence,这样就导致sequence所在字段数据顺序不是连续的,如果要求sequence所在字段的数据连续,就必须给sequence赋予ORDER属性。

下面是相关实验。

实验一:NOORDER属性,RAC两个节点使用各自CACHE范围内的sequence值。

实例1:

SQL> create sequence sq_test cache 20;

Sequence created.
SQL> select sq_test.nextval from dual;

NEXTVAL
----------
1

实例2:

SQL> select sq_test.nextval from dual;

NEXTVAL
----------
21

默认情况下,sequence是NOORDER属性,而且两个实例分别分配了各自的cache,两个实例使用自己的cache,这样sequence所在字段的数据不是按sequence顺序存放的。

实验二:ORDER属性,RAC两个节点使用同一个CACHE。

实例1:

SQL> drop sequence sq_test;

Sequence dropped.

SQL> create sequence sq_test cache 20 order;

Sequence created.
SQL> select sq_test.nextval from dual;

NEXTVAL
----------
1

实例2:

SQL> select sq_test.nextval from dual;

NEXTVAL
----------
2

可见,ORDER属性的sequence,RAC各个节点使用公用的CACHE,这样各节点之间就需要进行大量的数据交换,可能会级联产生相关的gc等待事件,影响性能。

 

本文固定链接: http://www.dbdream.com.cn/2013/04/awr%e5%88%86%e6%9e%90%e4%b9%8bdfs-lock-handle%e7%ad%89%e5%be%85%e4%ba%8b%e4%bb%b6/ | 信春哥,系统稳,闭眼上线不回滚!

该日志由 dbdream 于2013年04月08日发表在 Oracle, oracle 10g, oracle 11g 分类下, 你可以发表评论,并在保留原文地址及作者的情况下引用到你的网站或博客。
原创文章转载请注明: AWR分析之DFS lock handle等待事件 | 信春哥,系统稳,闭眼上线不回滚!
关键字: , , , , , ,

AWR分析之DFS lock handle等待事件:等您坐沙发呢!

发表评论

快捷键:Ctrl+Enter