Oracle热块问题分析

问题描述:

Oracle有两百多个会话在等待latch free等待事件,系统发生堵塞。

问题分析:

当时等待会话中的latch地址是'00000010ECD379E8',在该地址上等待最多的对象是主键PK_PRD_TAB1。


点击(此处)折叠或打开

  1. SQL> select /*+ RULE */
  2.   2 x.tch,
  3.   3 l.child#,
  4.   4 x.OBJ,
  5.   5 o.object_name
  6.   6 from sys.v$latch_children l, sys.x$bh x, dba_objects o
  7.   7 where x.hladdr = '00000010ECD379E8'
  8.   8 and x.hladdr = l.addr
  9.   9 and o.data_object_id = x.obj
  10.  10 order by x.tch desc;
  11.        TCH CHILD# OBJ OBJECT_NAME
  12. ---------- ---------- ---------- ------------------------------
  13.         50 18672 703092 PK_PRD_TAB1

由于该索引的访问次数非常多,导致该索引上的热块。

针对热块最好的方式应该是采用中间件缓存计算,将重复访问的结果缓存在中间件中。这样减少数据库的访问压力。由于当时采用的缓存技术有缺陷,只要采用另外一种方法,将索引的热点打散,进行hash分区操作。


点击(此处)折叠或打开

  1. create table PRD_TAB1
  2. (
  3.   CREATED_BY VARCHAR2(100),
  4.   CREATED_DATE DATE,
  5.   UPDATED_BY VARCHAR2(100),
  6.   UPDATED_DATE DATE,
  7.   TAB1_ID NUMBER(10),
  8. ......
  9.   GROUP_ID NUMBER(8),
  10. ......
  11. )PARTITION BY HASH(GROUP_ID)
  12. ;
  13. alter table PRD_TAB1
  14.   add constraint PK_PRD_TAB1 primary key (GROUP_ID, TAB1_ID)
  15.   using index PK_PRD_TAB1;

结论:

针对热块最好的方式应该是采用中间件缓存计算,将重复访问的结果缓存在中间件中。这样减少数据库的访问压力。如果没有中间件缓存,可以将索引的热点打散,进行hash分区操作。

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

转载于:http://blog.itpub.net/25105315/viewspace-2132126/

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值