一、问题发现

2月16日现场同事发现某个tablespace空间快要耗尽,让我们手工清楚些数据,腾出足够空间,等用户有预算添加磁盘。该问题年前已经处理过一次,我们已经将数据保留期限做了缩减,按道理不会这么快出现磁盘空间耗尽的情况。我猜测可能是自动分区程序没有运行,没有自动删除旧分区,而新数据又不断产生,导致磁盘空间被逐渐耗尽。

看出从2011-02-02开始到16号这段时间分区维护没有执行,导致空间满。

于是通知集成组同事运行自动分区维护程序。

自动分区维护运行后,空间使用率低于80%了。问题解决了。

过了1小时,现场同事又反映采集程序卡住不动了,让我们赶紧核查原因,排除故障,给出故障报告。

二、问题分析

首先想到的是不是哪个表被锁住了。

select * from v$locked_object t1,user_objects t2

where t1.object_id=t2.object_id

通过语句查到,确实有很多相关表被锁住了。

继续查是哪些语句锁住了表

select sid,

v$session.username 用户名,

last_call_et 持续时间,

status 状态,

LOCKWAIT 等待锁,

machine 用户电脑名,

logon_time 开始登入时间,

sql_text

from v$session, v$process, v$sqlarea

where paddr = addr

and sql_hash_value =

hash_value

and status = 'ACTIVE'

and v$session.username is not

null

order by last_call_et desc;

发现有个delete语句在执行,该delete语句为:

delete from table1 where column1=? and column2=? and

column3=?

看该语句的执行计划,发现是全表扫描,没有走索引。

我们估计是不是索引失效了

select status,T.* from user_indexes T

where table_name='TABLE1'

发现status='INVALID'失效。

重建该索引:

drop index ......

create index ......

问题解决。

是什么问题导致的索引失效呢?该问题是运行分区维护后发生的,于是把该问题转给了开发自动分区管理的同事了。该问题后续再补充。

三、知识点总结

1.如何判断和确认索引失效?

通过查看user_indexes的status来确定用户索引状态。

分区索引查看DBA_IND_PARTITIONS的status来确定。

2.重建索引的方式有哪些,有什么区别?

1)drop index...和create index

2)alter index idx_name rebuild

3)alter index idx_name rebuild online

a)rebuild会阻塞对基表的DML操作,但不会影响rebuild期间查询对原有索引的使用。

b)rebuild的数据源可能是基表,也可能是原索引。取决于基表和原索引的大小,那个小,rebuild时就会用那个作为数据源。

c)rebuild online运行用户在索引重建期间执行DML操作。

d)rebuild online的数据源是基表。

3.导致索引失效的原因有哪些?原因:当某些操作导致数据的rowid改变,索引就会完全失效。

那什么时候会导致rowid改变使得索引unuseable或者invalid呢?

一般普通表在在如下3个情况下可以使index unusable

1)move 【alter table move】【alter table t02 move tablespace

tbs01;】

2)sqlldr 【sqlldr ( parallel or direct )append 】【sqlldr direct=y +

主键重复】

3)手动alter index unusable

对分区表,又要分local index和globa index来说

1)首先上面的导致普通表上的索引失效的原因对分区表也同样适用.

2)对local index在exchange without including

indexes的时候也会unusable

3)global index在partition mt的时候会导致unusable[除非加上update global

indexes]

以下为引用:

1.导致的原因:

在SQL*LOADER 加载过程中会维护索引,由于数据量比较大,在SQL*LOADER 加载过程中出现异常情况,导致ORACLE

来不及维护索引,导致索引处于失效状态,影响查询和加载。 异常情况主要有:在加载过程中杀掉SQL*LOADER

进程,重启,表空间不够等。

2. global索引,当global 索引所在表执行alter table

涉及下列操作时,会导至该索引失效:

? ADD PARTITION | SUBPARTITION

? COALESCE PARTITION | SUBPARTITION

? DROP PARTITION | SUBPARTITION

? EXCHANGE PARTITION | SUBPARTITION

? MERGE PARTITION | SUBPARTITION

? MOVE PARTITION | SUBPARTITION

? SPLIT PARTITION | SUBPARTITION

? TRUNCATE PARTITION | SUBPARTITION

因此,建议用户在执行上述操作sql 语句后附加update indexes 子句,oracle 即会自动维护全局索引。

3. 执行alter table 时未指定update indexes 子句:

如果是range/list 分区,其local 索引和global 索引不会受影响;

如果是hash 分区,新加分区及有数据移动的分区的local 索引和glocal 索引会被置为unuseable,

需要重新编译

对于分区表中索引失效要重建索引

select 'alter index '||t.index_name||' rebuild partition

'||t.partition_name from user_ind_partitions t where

t.index_name='IDX_PART2' and

t.status='unusable'

查出来后,在命令窗口执行。查出来的语句就可以了。

oracle or索引失效_ORACLE索引失效的问题分析相关推荐

  1. oracle组合索引失效_oracle 索引失效原因

    1) 没有查询条件,或者查询条件没有建立索引 2) 在查询条件上没有使用引导列 3) 查询的数量是大表的大部分,应该是30%以上. 4) 索引本身失效 5) 查询条件使用函数在索引列上,或者对索引列进 ...

  2. mysql in or索引失效_in 索引失效的问题

    简单的in查询 索引失效: 步骤 1.检查建立索引没有 order_status 字段为普通索引的tinyint类型 2.检查是否使用了使索引失效的语句 3.explain查看执行计划 而 in(1) ...

  3. sql语句分析是否走索引_SQL Server 索引使用分析(2)- 改善SQL语句,防止索引失效...

    原文出处 改善SQL语句 很多人不知道SQL语句在sql server中是如何执行的,他们担心自己所写的SQL语句会被SQL SERVER误解.比如: select * from table1 whe ...

  4. mysql in 索引 失效_in 索引失效的问题

    简单的in查询 索引失效: 步骤 1.检查建立索引没有 order_status 字段为普通索引的tinyint类型 2.检查是否使用了使索引失效的语句 3.explain查看执行计划 而 in(1) ...

  5. 索引的使用—— 验证索引提升查询效率 || 避免索引失效 —— 全值匹配 /最左前缀法则/范围查询右边的列,不能使用索引/不要在索引列上进行运算操作/字符串不加单引号,造成索引失效

    索引的使用 索引是数据库优化最常用也是最重要的手段之一, 通过索引通常可以帮助用户解决大多数的MySQL的性能优化问题 验证索引提升查询效率 查询速度很快,接近0s ,主要的原因是因为id为主键,有索 ...

  6. is NULL , is NOT NULL 有时索引失效 || in 走索引, not in 索引失效 ||单列索引和复合索引 || 查看索引使用情况

    is NULL , is NOT NULL 有时索引失效 in 走索引, not in 索引失效 单列索引和复合索引 尽量使用复合索引,而少使用单列索引 数据库会选择一个最优的索引(辨识度最高索引)来 ...

  7. mysql索引失效_MySQL索引失效的底层原理详解,终于有人讲清楚了

    前言 吊打面试官又来啦,今天我们讲讲MySQL索引为什么会失效,很多文章和培训机构的教程,都只会告诉你,在什么情况下索引会失效. 比如:没遵循最佳左前缀法则.范围查询的右边会失效.like查询用不到索 ...

  8. mysql数据索引失效_MySQL索引失效的几种情况

    1.索引无法存储null值 a.单列索引无法储null值,复合索引无法储全为null的值. b.查询时,采用is null条件时,不能利用到索引,只能全表扫描. 为什么索引列无法存储Null值? a. ...

  9. order by使用索引列排序时会失效吗?

    order by使用索引列排序时会失效吗? 在使用order by对某列进行排序时, 其sql一定进行了多表联查的操作. 说白了肯定做了表关联. 既然有表关联, 那order by排序就可以对任意的表 ...

最新文章

  1. jQuery源码分析-each函数
  2. 光纤收发器的原理及应用_光纤收发器的几种常规应用
  3. Wince6.0p上用ASP技术实现Webserver
  4. 2021年中国手机游戏行业研究报告
  5. 小程序坑集【日常总结,持续更新(11.08更新)】
  6. python signal
  7. 实体经济不改变经营思路和销售模式
  8. hashCode方法的使用
  9. 软件项目管理 project 实验
  10. 软考程序员资源免费分享
  11. 租号服务器未响应,租号玩启动不了wegame
  12. Python Computer Vision Programming学习笔记(一)——Python以及各Package安装
  13. led大屏按实际尺寸设计画面_LED显示屏尺寸规格及计算方法
  14. 【CV Transformer 论文笔记】Intriguing Properties of Vision Transformers
  15. 微信小程序checkbox调整大小
  16. 微信小程序—收藏功能
  17. 6.Spring Cloud初相识-------Zool路由
  18. 信息论 | 计算离散信源的信息量和熵的MATLAB实现(函数封装调用)
  19. Spring/SpringBoot系列之Spring中涉及的9种设计模式【七】
  20. 【转】PHP PDO 学习笔记

热门文章

  1. python-纸牌小游戏练习题
  2. Linux网络服务(中)FTP服务配置
  3. 高校教师工资管理系统java_基于jsp的高校职工工资管理系统-JavaEE实现高校职工工资管理系统 - java项目源码...
  4. private关键字:确保数据的安全(进行安全性把关)
  5. 通达信股票接口盘后数据下载流程是怎么样的?
  6. 基于Java+Swing+Mysql实现汽车信息管理系统
  7. 【解决回车键出现乱码的问题】禁用Enter键触发form表单提交的问题 ,同时启用保留textarea换行操作
  8. 手机毒霸去广告功能分析二:广告View的识别
  9. ManageEngine 详解IT服务管理(ITSM)流程五阶段
  10. VTP(VLAN Trunking Protocol)