ITPub博客

首页 > 数据库 > Oracle > 【ASK_ORACLE】由于索引分裂而产生的性能问题的解决方案

【ASK_ORACLE】由于索引分裂而产生的性能问题的解决方案

原创 Oracle 作者:Attack_on_Jager 时间:2022-09-26 21:48:17 0 删除 编辑

环境信息

OS:RHEL 6.10

Grid&DB:Oracle 11.2.0.4



问题描述

接到开发反馈夜间跑批业务非常缓慢,需要协助排查。抓取AWR报告发现,在“Top 5 Timed Events”这一栏里首当其冲的等待事件就是“enq: TX - index contention”,第一反应就是大量高并发的DML操作导致了索引分裂产生的性能问题(幸亏这个库不是RAC,不然情况更严重)。


注:索引分裂的知识点可参考:

关于Oracle索引分裂你需要知道的: http://blog.itpub.net/69992972/viewspace-2916305/


接着找到发生分裂的索引:

 

Segments by Row Lock Waits:
 
Owner   Tablespace   Object Name  Obj.Type   Row Lock Waits  % of Capture
PLIS      PLIS        pl_status_idx   INDEX      6,981           92.07
PLIS      PLIS        pl_pos_idx      INDEX      1,557           23.91
PLIS      PLIS        pl_zt_idx       INDEX       976            15.56

 

注:也可以在动态性能视图v$segment_statistics里查到

 

 

解决办法

由于索引分裂是由于索引块的竞争压力过大,产生了索引热块,有两种解决办法来减少索引热块:

1. 创建hash分区索引

2. 创建反向索引

由于跑批的表不是分区表,所以采用第二种方式,把上面的三个索引删除并重建:

create index pl_status_idx on xxx.xxx REVERSE;
create index pl_pos_idx on xxx.xxx REVERSE;
create index pl_zt_idx on xxx.xxx REVERSE;

 

注:另外一种方法也可以尝试,如果此时的delete操作已经结束,可以rebuild或者shrink索引,语法如下:

alter index pl_status_idx rebuild;
alter index pl_status_idx shrink space;


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

请登录后发表评论 登录
全部评论
在某银行任职DBA,拥有多年数据库运维经验,擅长Oracle,MySQL。尤其擅长Oracle的SQL优化,数据库性能调优,数据库备份、恢复与迁移。拥有的认证:OCM 12c,OCM 11g,MySQL OCP,RHCE,阿里云ACP,巨杉SCDP,软考系统集成工程师认证,Oracle Iaas OCA,OBCA,TDSQL认证,TBase认证

注册时间:2021-01-11

  • 博文量
    142
  • 访问量
    482803