gc cr引起的数据库性能问题

业务场景:
1 业务表每天插入当天的数据,大概数据量为2000万
2 第二天清除前一天的2000多万数据
3 数据库删除前一天数据和插入当天数据进行时间隔离,防止性能问题。


产生的问题:
两个节点的RAC,节点1在delete数据(数据为2000多万),节点2在insert update数据,由于节点1删数据慢了,时间上和节点2的操作重合。


导致节点2的效率特别低。由此引起了gc cr事件,并且由于并发量很大的原因,产生各种等待事件如下:
1 enq: TX index contention(索引争用)
   1.1 如出现enq: TX - index contention,说明此时正有会话正在操作分裂的索引块,而你所属会话要更新此数据块则发生此事件
   1.2 高并发会产生此事件                                                                                                                                                                     
   1.3 把索引和表存储在独立的表空间,加大索引的block size(注意:其它附加副作用,暂未测试)
   1.4 重构索引为反向键索引或全局hash index,说白了就是把索引块打散分布到多个数据块,不要集中存储;这样每个块竞争的机会就减少
   1.5 修正index pctfree为0,大大减少index contention, 但要注意表是否只能insert,如还伴随大量的update
2 enq: TX - row lock contention(行锁争用)
   2.1不同的session更新或删除同一条记录;
   2.2 唯一索引有重复索引;
   2.3 位图索引同时被更新或同时并发的向位图索引字段上插入相同字段值;
   2.4 并发的对同一个数据块上的数据进行update操作;
   2.5 等待索引块完成分裂;


紧急解决过程:
1 kill节点1的delete会话
2 kill后发现有数据库有大量的回滚操作,又引起了transaction事件,删除该事件对应的会话。


事后处理方法:
 将业务表修改为日分区表,避免gc cr事件。每天对单分区进行truncate操作。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值