Oracle数据库存在不可用索引性能问题

数据库
在实践中ORACLE数据库存在不可用索引会引发性能问题。所谓的不可用索引,是指索引自身出了问题,不能被所有SQL使用到。这与因SQL写法不当而无法使用索引的索引失效情况不同。

在实践中ORACLE数据库存在不可用索引会引发性能问题。

所谓的不可用索引,是指索引自身出了问题,不能被所有SQL使用到。这与因SQL写法不当而无法使用索引的索引失效情况不同。

当索引变为不可用时,原本可以使用该索引的SQL都将无法使用该索引,只能选择全表扫描或全分区扫描,这将导致SQL执行效率大幅下降。如果并发高一些,将会耗尽数据库主机硬件资源,导致所有请求响应超时。

导致索引不可用的情况通常有:

1.当用truncate/drop/exchange 操作分区时,全局索引会失效。增加 update global indexes 参数,全局索引就不会失效了。

2.exchange的临时表没有索引,或者有索引,没有用including indexes的关键字,会导致局部的索引失效,就是某个分区失效。

重建局部索引只能用alter index local_idx rebuild partition p1这样的方式

3.分区表SPLIT的时候,如果MAX区中已经有记录了,这个时候SPLIT就会导致有记录的新增分区的局部索引失效!

4.对表执行move操作,将导致表上所有索引变为不可用。

5.sqlldr 如带有 skip_index_maintenance=true 参数,数据导入时将不维护索引,会导致表上所有索引不可用。所以,在完成数据导入后,需重建表上所有索引。

通过检查不可用索引,排查索引不可用的原因,修正存在缺陷的维护操作,避免生产事件的发生,只重建不可用索引,是远远不够的。尤其小心不同日期同一时刻导致索引不可用的情况。

一旦出现不可用索引,就特别容易引发生产事故。所以,请特别重视,排查原因,消除隐患。

修复建议:

1.找出导致索引不可用的原因

可从Oracle alert日志中查找索引不可用的日志,根据时间点排查相关表的维护类操作,进而确定引发的原因。

ssh登陆oracle服务器上,查看日志命令:

cd /home/db/oracle/diag/rdbms/<库名>/<实例名>/trace
grep -i -w 'unusable' -B2 -A2 alert_<实例名>.log

2.如果是全局分区索引,建议将索引删掉后重建。对于本地分区索引,重建不可用索引分区或索引子分区。

参考SQL语句:

select * from user_indexes where status = 'UNUSABLE';  alter index <index_name> rebuild online;


select * from user_ind_partitions where status = 'UNUSABLE'; 


alter index <index_name> rebuild partition <partition_name> online;


select * from user_ind_subpartitions where status = 'UNUSABLE'; 


alter index <index_name> rebuild subpartition <subpartition_name> online;
责任编辑:华轩 来源: 测试小号等闲之辈
相关推荐

2023-11-16 17:12:33

数据库oracle

2022-02-09 11:22:22

数据库MySQL连接池

2010-07-30 09:30:14

DB2数据库

2011-08-04 11:35:14

服务器注册表

2010-03-16 09:41:32

Python不可用

2011-06-08 13:45:34

Oracle

2011-03-16 08:54:45

Oracle数据库索引

2011-10-27 09:31:25

Windows 8 B

2011-07-25 14:49:36

jQuery

2009-09-08 10:54:42

支付宝Firefox LinLinux插件

2011-07-14 09:31:22

Sql Server属性ErrorLogF注册表

2010-06-17 12:59:07

Oracle

2021-06-26 10:46:04

Windows 11操作系统IE浏览器

2010-08-02 16:40:43

面试

2021-09-21 10:41:19

iOS苹果系统

2014-07-22 09:35:44

2011-05-17 15:30:27

Oracle数据库ADO

2010-04-23 11:32:22

Oracle数据库

2010-04-21 13:52:17

Oracle数据库性能

2011-05-20 10:30:20

ORACLE数据库性能优化
点赞
收藏

51CTO技术栈公众号