ITPub博客

首页 > 数据库 > Oracle > enq: SQ - contention 等待事件处理办法

enq: SQ - contention 等待事件处理办法

原创 Oracle 作者:huangdazhu 时间:2014-03-24 17:08:12 0 删除 编辑

故障描写:
2014-3-24
RAC数据库,应用系统运行异常,登录不进

数据库信息查看:
后台CPU飙升厉害,资源使用过大。发现两个节点锁等待超过1100,并且还在不断增长

解决办法:
部分外来进程的kill,锁等待消除。

分析报告:

我们可以通过分析故障前后的数据库运行状态来分析问题,比如:

故障时的数据库状态如下:


故障处理后的数据库状态:

故障发生时,p_pub_user_online_curd54分钟被执行了83229次,相当于每秒26次;

故障处理后,p_pub_user_online_curd70分钟执行了54562次,相当于每秒13次。

通过比较可以看到,故障时的系统负载比非故障时提高了一倍。

因为p_pub_user_online_curd(:1, :2, :3)存储过程,涉及到序列SQ_MENULOGSQ_PUBLOGS的存取,由于序列的cache默认为20,所以在高并发的情况下,会导致enq:SQ-contention,大量的序列等待导致服务器cpu飙高。这个从AWR报告中也有体现:



序列冲突引起的等待时间占用了数据库90%以上的CPU时间。

解决措施

1、  降低存储过程p_pub_user_online_curd调用的频率;

2、  SQ_MENULOGSQ_PUBLOGS的缓存从20调整1000,执行语句如下:

alter sequence SQ_MENULOG cache 1000;

alter sequence SQ_PUBLOGS cache 1000;

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

请登录后发表评论 登录
全部评论

注册时间:2013-05-08

  • 博文量
    185
  • 访问量
    406953