oracle row cache lock 之sequence
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了oracle row cache lock 之sequence相关的知识,希望对你有一定的参考价值。
今天遇到一个生产库产生大量row cache lock,以下是相应步骤:
1 查询当时P1的情况
select INSTANCE_NUMBER,p1,count(*) cnt from dba_hist_active_sess_history where event=‘row cache lock‘ and SAMPLE_TIME>=to_date(‘2018-08-31 10:00:00‘,‘yyyy-mm-dd hh24:mi:ss‘) and SAMPLE_TIME <=to_date(‘2018-08-31 10:40:00‘,‘yyyy-mm-dd hh24:mi:ss‘) group by INSTANCE_NUMBER,p1 order by cnt;
2 根据第一步查询的P1,代入到下面cache#,这里查询出来的结果是13,dc_sequences
select INST_ID, CACHE#,TYPE,GETS,PARAMETER from gv$rowcache where CACHE# in (?) order by gets;
3 查询当时用户会话量情况
select INSTANCE_NUMBER,USER_ID,count(*) cnt from dba_hist_active_sess_history 2 where SAMPLE_TIME>=to_date(‘2018-08-31 10:00:00‘,‘yyyy-mm-dd hh24:mi:ss‘) and SAMPLE_TIME <=to_date(‘2018-08-31 10:30:00‘,‘yyyy-mm-dd hh24:mi:ss‘) 3 group by INSTANCE_NUMBER,USER_ID order by 1,cnt;
4 查询对应SQL的情况
select INSTANCE_NUMBER,SAMPLE_TIME,event,sql_opname,sql_id,count(*) cnt from dba_hist_active_sess_history where SAMPLE_TIME>=to_date(‘2018-08-31 10:00:00‘,‘yyyy-mm-dd hh24:mi:ss‘) and SAMPLE_TIME <=to_date(‘2018-08-31 10:30:00‘,‘yyyy-mm-dd hh24:mi:ss‘) group by INSTANCE_NUMBER,SAMPLE_TIME,event,sql_opname,sql_id order by 2,1;
5 查询对应节点更详细的会话信息
select INSTANCE_NUMBER,SAMPLE_TIME,session_id,BLOCKING_SESSION,current_obj#,user_id,event,sql_id,P1 from dba_hist_active_sess_history where SAMPLE_TIME>=to_date(‘2018-08-31 10:17:00‘,‘yyyy-mm-dd hh24:mi:ss‘) and SAMPLE_TIME <=to_date(‘2018-08-31 10:20:00‘,‘yyyy-mm-dd hh24:mi:ss‘) and INSTANCE_NUMBER=2 and event=‘row cache lock‘;
最后定位是一个高频INSERT 语句引用SEQUENCE引起的,而这个序列是NOCAHE,改成cache恢复正常
以上是关于oracle row cache lock 之sequence的主要内容,如果未能解决你的问题,请参考以下文章
Oracle11g 密码延迟认证导致library cache lock的情况分析
Oracle 数据库发生等待事件:enq: TX - row lock contention ,排查思路
Oracle 数据库发生等待事件:enq: TX - row lock contention ,排查思路
ORACLE等待事件:enq: TX - row lock contention