暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Oracle10gR2中的Mutex竞争的案例

原创 eygle 2008-10-14
448
最近有客户在Oracle10gR2上遇到了Mutex竞争的问题。



Mutex是Oracle在Oracle10g中引入的串行机制,逐渐会用来替代一些存在性能问题的Latch。

和Latch相比,一个Mutex Get大约仅需要30~35个指令,而Latch Get则需要大约150~200个指令,同时在大小上,每个Mutex仅占用大约16 Bytes空间,而一个latch在10gR2中要占用大约112 Bytes空间。



Mutex首先替代了Library Cache Latch以及Library Cache Pin,在Oracle 10.2.0.2上通过隐含参数_kks_use_mutex_pin的调整可以限制是否使用Mutex机制来实现Cursor Pin:

SQL> set linesize 120

SQL> col name for a30

SQL> col value for a20

SQL> col describ for a60

SQL> SELECT x.ksppinm NAME, y.ksppstvl VALUE, x.ksppdesc describ

  2    FROM SYS.x$ksppi x, SYS.x$ksppcv y

  3  WHERE x.indx = y.indx

  4    AND x.ksppinm LIKE '%&par%'

  5  /

Enter value for par: mutex

old  4:    AND x.ksppinm LIKE '%&par%'

new  4:    AND x.ksppinm LIKE '%mutex%'



NAME                          VALUE                DESCRIB

------------------------------ -------------------- ------------------------------------------------------------

_kks_use_mutex_pin            TRUE                Turning on this will make KKS use mutex for cursor pins.



在新的Mutex Pins机制下,以下等待事件可能变得常见:

cursor: mutex S

cursor: mutex X

cursor: pin S

cursor: pin S wait on X

cursor: pin X



由于Mutex使用CAS(Compare and Swap)机制,所以在不支持CAS的HP Unix平台上就可能出现CPU消耗过高的情况。

这作为一个Bug在10.2.0.4版本中被修正。







「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论