用markhot缓解library cache:mutex x

  1. ora event 出现大量的library cache: mutex X,且除此等待之外,其他等待较少或没有。

  2.通过查询v$sessionlibrary cache: mutex X等待会话的p1值。

   Select p1,count(*) from v$session where event=’ library cache :mutex X’ group by p1 order by 2 asc;

  3.通过该p1值查出是在什么对象上出现争用。

Set wrapped on

Select case when (kglhdadr = kglhdpar) then 'Parent' else 'Child '||kglobt09 end cursor,

kglhdadr ADDRESS,substr(kglnaobj,1,20) name, kglnahsh hash_value,kglobtyd type,kglobt23 LOCKED_TOTAL,kglobt24 PINNED_TOTAL,kglhdexc EXECUTIONS,kglhdnsp NAMESPACE

from x$kglob where kglnahsh = '&p1';

  4.  使用 DBMS_SHARED_POOL.MARKHOT方式,把xxxxx对象标记为热。(注意不要标记同义词对象,11g11g以下会触发bug

   1)标记对象为热对象:

DBMS_SHARED_POOL.MARKHOT (

schema VARCHAR2,

objname VARCHAR2,

namespace NUMBER DEFAULT1, global BOOLEAN DEFAULT TRUE);

 

例如:exec dbms_shared_pool.markhot('xxxx','xxxxx',1);

 

   2)也可以直接标记sql为热对象,主要为cursor级别标记:

DBMS_SHARED_POOL.MARKHOT (

hash VARCHAR2,  

namespace NUMBER DEFAULT 1,

global BOOLEAN DEFAULTTRUE);

 

在SQL HASH VALUE的时候是16-byte hash value for the object

 

select kglnahsv from x$kglob where kglnahsh=&p1  and kglhdadr =kglhdpar;

 

exec DBMS_SHARED_POOL.MARKHOT(hash => xxxxxx’, namespace => 0);

 

 

  6. 检查热对象复制是否成功复制(至少观察3-5分钟):

Set wrapped on

SELECT * FROM v$db_object_cache where name=’xxxxx’;

 

Or

SELECT * FROM v$db_object_cache where hash_value=’xxxxxx’;

 


 

Makhot回退步骤:

makhot对象之后出现异常之后可以使用以下语句回退,该过程时间可能出现较长:

exec dbms_shared_pool.unmarkhot('xxxx','xxxxx',1);

 

exec DBMS_SHARED_POOL.UNMARKHOT(hash => xxxxxx, namespace => 0);

 

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/29863023/viewspace-2132959/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/29863023/viewspace-2132959/

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值