发现个library cache LOCK AND library cache pin 等待事件

探讨了在Oracle10gR2环境中两个并发运行的过程——属性过程和交易过程——之间的阻塞问题。尽管两个过程分别从同一张大表中获取数据并插入不同表中,理论上不应发生冲突,但在实际运行中却出现了交易过程因图书馆缓存锁而被属性过程阻塞的情况。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

<p>首先 库位分析库 ORACLE 10G R 2 01 </p>
<p>其次 开发了两个过程暂时称为属性过程和交易过程。 从同一个大表获取相关的数据 然后插入不同的表。应该说该两个过程不锁相关对象!</p>
<p>其二 这两个过程测试中都跑的好好的。</p>

<p>后来用TOAD 把过程的运行日志表</p>
<p>ALTER TABLE BA.T_BASE_SP_RUNLOG CACHE;<br>
ALTER TABLE BA.T_BASE_SP_RUNLOG STORAGE ( BUFFER_POOL KEEP );</p>

<p>没多久 其中从EM看到 已经有个过程在运行中 它是属性过程。再启动交易过程 从EM上发现 属性过程既然阻塞了交易过程。</p>
<p>交易过程等待事件 LIBCACHE LOCK AND library cache pin</p>

<p>属性过程 则是DB FILE 顺序读!</p>

<p>这就很纳闷了,它们虽然同时访问流水表,只是SELECT而已,并不能发生冲突啊!</p>
<p>下面语句看被锁定的对象</p>
<p>select xidusn, object_id, session_id, locked_mode from v$locked_object;</p>

<p>属性过程是151会话 在做 update b set time=(select min(addtime) from user_pay_bak where f_username=:B )</p>
<p>只是锁定了B表而已</p>

<p>select * from v$session_wait where sid=64 交易过程 library cache LOCK</p>

<p>交易过程 正在等待 对象 P_BASE_DAY_I_SPRUN_LOG</p>
<p>SELECT KGLNAOWN,KGLNAOBJ<br>
FROM x$kglob<br>
WHERE kglhdadr in( select P1RAW from v$session_wait where sid=64);</p>

<p>而它只是把过程运行的信息写进日志表的过程而已!</p>


<p>属性过程:</p>

<p>update b set time=(select min(addtime) from user_pay_bak where f_username=:B )</p>
<p>前面有四个事务</p>
<p>1 INSERT INTO.... COMMIT; P_BASE_DAY_I_SPRUN_LOG(.....);</p>

<p>2 FOR CUR() LOOP UPDATE B SET CUSTIME=() END LOOP; COMMIT; P_BASE_DAY_I_SPRUN_LOG(.....);</p>
<p>3 FOR CUR() LOOP UPDATE B SET EMAILTIME=() END LOOP; COMMIT; P_BASE_DAY_I_SPRUN_LOG(.....);</p>
<p>4 FOR CUR() LOOP UPDATE B SET MOBILETIME=() END LOOP; COMMIT; P_BASE_DAY_I_SPRUN_LOG(.....);</p>

<p>既然已经执行到第五步:update b set time=(select min(addtime) from user_pay_bak where f_username=:B ) </p>
<p>那么前面四个应该都执行完了,同时也调用了写日志过程</p>


<p>难道写日志过程 被 属性过程给霸占不释放吗?</p>
<p>用TOAD 释放运行日志表 还是不行,再把交易表终止,再运行 也不行。</p>
<p>最后终止属性过程,然后再运行就OK 了</p>


<p>难道表被CACHE 。。。。。。</p>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值