作者:韩涛
文章来自微信公众号:平台人生
上次的分享不知道大家是不是还记得,在本地索引中某个分区失效的极端情况下,如果分区键的值是通过一个子查询结果来获取的,优化器将不能确定分区扫描的范围,并将认为相关本地索引为不可用状态,导致执行计划改变的严重后果。今天我们就继续分析下这个案例,看看强壮的本地索引到底存在着哪些软肋呢?
既然问题的根本是本地索引IND_LOCAL,首先想到的就是查看下表和本地索引各个分区的last_ddl_time时间。主要观察T_PART表和T_RANGE_P3分区的last_ddl_time时间。从结果可以看出在20161115 03:15:17,对T_RANGE_P3有过DDL操作,导致了本地索引失效。那么究竟是什么操作呢?按照问题时间,通过查询ASH视图,成功定位到了造成本地索引失效的语句。即当晚对T_RANGE_P3分区进行了交换分区操作,导致了本地索引失效。此处强烈推荐设置一个ORACLE参数:enable_ddl_logging,该参功能为记录数据库中所有的DDL操作,该参数默认值为false,在线修改生效,设置为true后,可以根据时间点直接去alert日志中查找对应DDL语句,更加方便准确快捷。
图一对象last_ddl_time时间
交换分区作为迅速导入分区数据的一种方式,难道因为这个就不能使用了吗?当然不是,查看文档后发现后面还可以加入update indexes和including indexes参数来维护索引,但到底效果如何,各位还是眼见为实吧。
如果觉得我的文章对您有用,请点赞。您的支持将鼓励我继续创作!
赞0
添加新评论0 条评论