ORACLE重建索引需要考虑问题

Oracle性能分析9:重建索引 当索引出现问题时,会导致严重的性能问题,索引问题包括索引不可用、索引碎片导致性能下降,我们需要一些手段在检测索引的问题,并解决这些问题。这一篇将为你讲述怎么定位索引问题,并提供了解决的办法。 索引不可用 索引不可用的原因有很多,包括:  1)索引空间耗尽,导致SQL*Loader更新索引失败;  2)创建索引的过程中实例失败;  3)唯一键有重复值;  4)某个索引的顺序与sorted 阅读详情

一:考虑重建索引的场合
1:表上频繁发生update,delete操作
2:表上发生了alter table ..move操作(move操作导致了rowid变化)
二:判断重建索引的标准
  索引重建是否有必要,一般看索引是否倾斜的严重,是否浪费了空间;
  那应该如何才可以判断索引是否倾斜的严重,是否浪费了空间,如下:
1,        对索引进行结构分析
Analyze index indexname validate structure;
2, 在执行步骤1的session中查询index_stats表,不要到别的session去查询
   select height,DEL_LF_ROWS/LF_ROWS from index_stats;
3, 在步骤2查询出来的height>=4或者DEL_LF_ROWS/LF_ROWS>0.2的场合,该索引考虑重建;
Example:
   SQL> select count(*) from test_index;
         COUNT(*)
----------
                   2072327
SQL> analyze index pk_t_test validate structure;
Index analyzed
        SQL> select height,DEL_LF_ROWS/LF_ROWS from index_stats;
                     HEIGHT         DEL_LF_ROWS/LF_ROWS
---------- -------------------
         3                   0
SQL> delete from test_index where rownum<250000;
          249999 rows deleted
        SQL> select height,DEL_LF_ROWS/LF_ROWS from index_stats;
                    HEIGHT                 DEL_LF_ROWS/LF_ROWS
---------- -------------------
                         3                   0
        SQL> analyze index pk_t_test validate structure;
                Index analyzed
SQL> select height,DEL_LF_ROWS/LF_ROWS from index_stats;
                    HEIGHT                  DEL_LF_ROWS/LF_ROWS
---------- -------------------
                 3                           0.0777430939338362
三:重建索引的方式
    1:drop 原来的索引,然后再创建索引;
    2:alter index indexname rebuild (online);
    方式一:耗时间,无法在24*7环境中实现
    方式二:比较快,可以在24*7环境中实现
    建议使用方式二
四:alter index rebuid内部过程和注意点
    1:alter index rebuild 和alter index rebuil online的区别
(1)        扫描方式不同
Rebuild以index fast full scan(or table full scan) 方式读取原索引中的数据来构建一个新的索引,有排序的操作; rebuild online 执行表扫描获取数据,有排序的操作;
Rebuild  方式 (index fast full scan  or  table full scan  取决于统计信息的cost)
Eg1:
SQL> explain plan for alter index idx_policy_id2 rebuild;
Explained
SQL> select * from table(dbms_xplan.display);
PLAN_TABLE_OUTPUT
---------------------------------------------------------------------
| Id  | Operation              |  Name           | Rows  | Bytes | Cost  |
---------------------------------------------------------------------
|   0 | ALTER INDEX STATEMENT  |                 |   999K|  4882K|  3219 |
|   1 |  INDEX BUILD NON UNIQUE| IDX_POLICY_ID2  |       |       |       |
|   2 |   SORT CREATE INDEX     |                 |   999K|  4882K|       |
|   3 |    INDEX FAST FULL SCAN | IDX_POLICY_ID2  |   999K|  4882K|       |
---------------------------------------------------------------------
Eg2:
SQL>  explain plan for alter index idx_policy_id rebuild;
Explained
SQL> select * from table(dbms_xplan.display);
PLAN_TABLE_OUTPUT
---------------------------------------------------------------------
| Id  | Operation              |  Name          | Rows  | Bytes | Cost  |
---------------------------------------------------------------------
|   0 | ALTER INDEX STATEMENT  |                |  2072K|     9M|   461 |
|   1 |  INDEX BUILD NON UNIQUE| IDX_POLICY_ID  |       |       |       |
|   2 |   SORT CREATE INDEX    |                |  2072K|     9M|       |
|   3 |    TABLE ACCESS FULL   | TEST_INDEX     |  2072K|     9M|   461 |


Eg3: (注意和Eg1比较)
Rebuil online 方式:
SQL> explain plan for alter index idx_policy_id2 rebuild online;
Explained
SQL> select * from table(dbms_xplan.display);
PLAN_TABLE_OUTPUT
---------------------------------------------------------------------
| Id  | Operation              |  Name           | Rows  | Bytes | Cost  |
---------------------------------------------------------------------|   0 | ALTER INDEX STATEMENT  |                 |   999K|  4882K|  3219 |
|   1 |  INDEX BUILD NON UNIQUE| IDX_POLICY_ID2  |       |       |       |
|   2 |   SORT CREATE INDEX    |                 |   999K|  4882K|       |
|   3 |    TABLE ACCESS FULL   | TEST_INDEX2     |   999K|  4882K|  3219 |
(2)        rebuild 会阻塞dml操作,rebuil online 不会阻塞dml操作;
(3)        rebuild online时系统会产生一个SYS_JOURNAL_xxx的IOT类型的系统临时日志表,所有rebuild online时索引的变化都记录在这个表中,当新的索引创建完成后,把这个表的记录维护到新的索引中去,然后drop掉旧的索引,rebuild online就完成了。

注意点:
1,        执行rebuild操作时,需要检查表空间是否足够;
2,        虽然说rebuild online操作允许dml操作,但是还是建议在业务部繁忙时间段进行;
3,        Rebuild操作会产生大量redo log ;

五:重建分区表上的分区索引
   1:重建分区索引方法:
     Alter index indexname rebuild partition paritionname tablespace tablespacename;
     Alter index indexname rebuild subpartition partitioname tablespace  tablespacename;
     Partition name 可以从user_ind_partitions查找
     Tablepace 参数允许alter index操作更改索引的存储空间;

六:索引状态描述

在数据字典中查看索引状态,发现有三种:   
  VALID   
  N/A   
  UNUSABLE   
   
valid:当前索引有效
N/A :分区索引 有效
unusable:索引失效

七:术语

  高基数:简单理解就是表中列的不同值多
  低基数:建单理解就是表中的列的不同值少
  以删除的叶节点数量:指得是数据行的delete操作从逻辑上删除的索引节点   的数量,要记住oracle在删除数据行后,将“死“节点保留在索引中,这样做可以加快sql删除操作的速度,因此oracle删除数据行后可以不必重新平衡索引。
   索引高度:索引高度是指由于数据行的插入操作而产生的索引层数,当表中添加大量数据时,oracle将生成索引的新层次以适应加入的数据行,因此,oracle索引可能有4层,但是这只会出现在索引数中产生大量插入操作的区域。Oracle索引的三层结构可以支持数百万的项目,而具备4层或是更多层的需要重建。
    每次索引访问的读取数:是指利用索引读取一数据行时所需要的逻辑I/O操作数,逻辑读取不必是物理读取,因为索引的许多内容已经保存在数据缓冲区,然而,任何数据大于10的索引都需要重建。

    那么什么时候重建呢?我们可以利用analyze index …….. compute statistics 对表进行分析。然后察看dba_indexes中的blevel。这列是说明索引从根块到叶快的级别,或是深度。如果级别大于等于4。则需要重建,如下:
Select index_name,blevel from dba_indexes where blevel>=4.
   另一个从重建中受益的指标显然是当该索引中的被删除项占总的项数的百分比。如果在20%以上时,也应当重建,如下
SQL>anlyze index ------ validate structure
SQL>select (del_lf_rows_len/lf_rows_len)*100 from index_stats where name=’------‘
就能看到是否这个索引被删除的百分比。
上面只是判断,那么,怎样重建会更好呢?
建索引的办法:
a.        删除并从头开始建立索引。
b.        使用alter index -------- rebuild 命令重建索引
c.        使用alter index -------- coalesce命令重建索引。
下面讨论一下这三种方法的优缺点:
1).删除并从头开始建索引:方法是最慢的,最耗时的。一般不建议。
2).Alter index ---- rebuild 快速重建索引的一种有效的办法,因为使用现有索引项来重建新索引,如果客户操作时有其他用户在对这个表操作,尽量使用带online参数来最大限度的减少索引重建时将会出现的任何加锁问题,alter index ------- rebuild online.但是,由于新旧索引在建立时同时存在,因此,使用这种技巧则需要有额外的磁盘空间可临时使用,当索引建完后把老索引删除,如果没有成功,也不会影响原来的索引。利用这种办法可以用来将一个索引以到新的表空间。
Alter index ------ rebuild  tablespace -----。
  这个命令的执行步骤如下:
   首先,逐一读取现有索引,以获取索引的关键字。
   其次,按新的结构填写临时数据段。
   最后,一旦操作成功,删除原有索引树,降临时数据段重命名为新的索引。
   需要注意的是alter index ---rebuild 命令中必须使用tablespace字句,以保证重建工作是在现有索引相同的表空间进行。
3).alter index ----- coalesce 使用带有coalesce参数时重建期间不需要额外空间,它只是在重建索引时将处于同一个索引分支内的叶块拼合起来,这最大限度的减少了与查询过程中相关的潜在的加锁问题,但是,coalesce选项不能用来讲一个索引转移到其他表空间。

八:其他
   1:truncate 分区操作和truncate 普通表的区别
      Truncate 分区操作会导致全局索引失效; truncate 普通表对索引没有影响;
      Truncate 分区操作不会释放全局索引中的空间,而truncate 普通表会释放
索引所占空间;
   2:rename 表名操作对索引没有影响,因为rename操作只是更改了数据字典,表中数据行的rowid并没有发生变化

TLSR8258蓝牙Mesh实战:从SDK下载到自定义通信指令全流程(附避坑指南) 本文详细介绍了TLSR8258蓝牙Mesh开发的完整流程,从SDK下载、环境搭建到自定义通信指令的实现。通过实战案例和避坑指南,帮助开发者快速掌握低功耗蓝牙Mesh网络构建技巧,适用于智能家居、工业监控等物联网场景。 阅读详情

相关推荐

避坑指南:SAP STO订单里‘发货存储地点’栏位不显示?检查这个关键配置

本文深入解析SAP STO订单中‘发货存储地点’栏位缺失问题的根本原因及解决方案。通过激活库存地点间转储功能、维护库存地点主数据等关键配置步骤,帮助用户快速恢复业务操作。特别适用于MM模块实施顾问和SAP系统管理员处理UB STO相关技术问题。

weixin_30632089的博客 99

重建索引需要考虑

一:考虑重建索引的场合1:表上频繁发生update,delete操作2:表上发生了alter table ..move操作(move操作导致了rowid变化)二:判断重建索引的标准索引重建是否有必要,一般看索引是否倾斜的严重...

conghaike9413的博客 288

ROS学习笔记之——无人机PID调参过程记录

For cooperaive inquiries, please visit the website:guanweipeng.com

gwpscut的博客 6829

关于Oracle索引建立的几个注意要点

创建索引的优点: 1、创建索引的最主要的原因是可以大大加快数据的检索速度。 2、可以加速表和表之间的连接。 3、在使用分组和排序子句进行数据检索时,同样可以显着减少查询中分组和排序的时间。 4、通过使用索引,可以在查询的过程中,使用优化隐藏器,提高系统的性能。 创建索引的缺点: 1、索引需要占物理空间,除了数据表占数据空间之外,每一个索引还要占一定的物...

weixin_33767813的博客 259

ROS水下仿真神器uuv_simulator:从零搭建水下机器人测试环境(附Gazebo配置全流程)

本文详细介绍了如何使用ROS和uuv_simulator从零搭建水下机器人仿真测试环境,包括Gazebo配置全流程。通过系统环境准备、水下世界构建、机器人模型定制开发等步骤,帮助开发者在虚拟海洋环境中高效验证算法,大幅降低研发成本。特别适合水下机器人研发人员参考。

ujm5678901的博客 263

Isograph Reliability Workbench 14实战:从零构建故障树分析模型

本文以“马达不转”为例,手把手教你使用Isograph Reliability Workbench 14从零构建故障树分析模型。内容涵盖创建工程、定义顶事件、添加逻辑门与基础事件等核心步骤,并介绍了模型检查与定性定量分析,帮助你系统掌握这一强大的可靠性工程工具。

weixin_29309213的博客 360

索引重建的必要性与影响 (文档 ID 1525787.1)

文档内容   用途   适用范围   详细信息   参考 适用于: Oracle Database - Enterprise Edition - 版本 8.1.7.0 和更高版本 本文档所含信息适用于所有平台 用途 本文章将重点概述重建索引的各种影响。我们通

cn_mos的专栏 851

前端使用二开Thingsboard一、二、三事(三)-规则链

以项目实战为基础,逐步介绍前端在thingsboard系统二次开发中的一些注意事项以及一些thingsboard一些页面功能讲解,为前端人员开发使用thingsboard提供一种可靠思路,打造一个完美的物联网系统。

weixin_43163457的博客 863

oracle大表创建索引注意事项,大表建立索引(在对正在运行的数据库时尤其需要注意)...

对一大表(百万级以上)建立索引时应当注意的事项及提高性能的手段一、注意事项:1、表空间和磁盘空间是否足够。索引也是一种数据,在建立索引的时候势必也会占用大量表空间。因此在对一大表建立索引的时候首先应当考虑的是空间容量问题。2、在对建立索引的时候要对表进行加锁,因此应当注意操作在业务空闲的时候进行。二、性能调整方面:1、磁盘I/O物理上,应当尽量把索引与数据分散到不同的磁盘上(不考虑阵列的情况)。逻...

weixin_39630855的博客 2176

【推荐100个unity插件】Unity URP(通用渲染管线)的基于物理的天地和预计算大气散射——UnityPhysicallyBasedSkyURP

本文介绍了Unity URP(通用渲染管线)中基于物理的天地和预计算大气散射的实现方法。该插件提供物理天空、大气散射、高度雾效、动态天空反射和环境光等功能,要求Unity 2022.3及以上版本,支持着色器模型3.5+。使用步骤包括:添加渲染器功能、配置Volume组件(天空、雾效等),并建议太阳强度设为3、曝光为0作为初始设置。插件已在GitHub和Gitee开源,附带详细配置截图和效果展示。文末推荐了多个Unity开发相关专栏,涵盖游戏开发全领域知识。作者向宇提供了博客链接,欢迎交流学习问题。

向宇的博客,专注php/web全栈 unity游戏开发,欢迎大家评论纠错 1226

12027.linux flash驱动之IS25LP01G/IS25WWP01G

一页:512字节 --> 扇区 4096字节 --> 块 32k,64k, 层层递进关系。

写给自己的笔记 2289

truncat对表和索引都影响

drop table dt_test_tab; create table dt_test_tab (i number); create index dt_test_idx on dt_test_tab(i); insert...

279

C/C++ 静态代码检查工具cppCheck

Cppcheck是一个用于C/C++代码的静态分析工具,它可以帮助开发者检测代码中的错误;Cppcheck可以检测出许多类型的错误,包括语法错误、未使用的函数、内存泄漏、未初始化的变量等;Cppcheck还支持用户自定义规则,这使得开发者可以根据自己的需求定制Cppcheck的行为;使用--suppress如果你想要忽略某些警告,可以在命令行中使用 --suppress 选项。

贝勒里恩的博客 4950

oracle bin开头的索引,ORACLE重建索引需要考虑问题

一:考虑重建索引的场合1:表上频繁发生update,delete操作2:表上发生了alter table ..move操作(move操作导致了rowid变化)二:判断重建索引的标准索引重建是否有必要,一般看索引是否倾斜的严重,是否浪费了空间;那应该如何才可以判断索引是否倾斜的严重,是否浪费了空间,如下:1, 对索引进行结构分析Analyze index indexname valid...

weixin_30039395的博客 558

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

oracle建索引默认并发,ORACLE重建索引需要考虑问题

一:考虑重建索引的场合1:表上频繁发生update,delete操作2:表上发生了alter table ..move操作(move操作导致了rowid变化)二:判断重建索引的标准索引重建是否有必要,一般看索引是否倾斜的严重,是否浪费了空间;那应该如何才可以判断索引是否倾斜的严重,是否浪费了空间,如下:1, 对索引进行结构分析Analyze index indexname valid...

weixin_30802819的博客 753

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

Oracle 的LOB类型索引的转移,或是重建问题

Oracle 的LOB类型索引的转移,或是重建问题原文地址:http://space.itpub.net/7728585/viewspace-683081当我们想重建LOB类型的索引的时候,就会出现报错,重现如下:create ...

1019

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

关于oracle的索引重建问题及原因分析

ORA-01502 state 这个错误是由于索引失效造成的,重建索引后,问题就解决了。 为了搞清楚索引为什么会失效,以及如何解决,我们做个测试: 首先我们创建一个普通的测试表(非分区表):SQL> create t...

cqq1799的博客 222

解决Oracle数据库的索引失效,多次重建也没效果的问题

Oracle数据库同样的sql如果在之前能够使用到索引,现在执行SQL不走索引的问题解决

firament的博客 3072

oracle 位图索引重建,oracle位图索引引发的系统问题

oracle位图索引引发的系统问题客户反映情况:**系统的个人信息维护模块响应时间太长,一个新增(或修改)操作要等上10分钟到30分钟才能完成。(注:在用户数大的时间这种情况更突出)硬件环境:IIS服务器,IBM服务器(8个双核CPU,16GB内存);数据库服务器,IBM小型机(8CPU,7328MB内存)数据库服务器软件环境:AIX5.3操作系统;oracle 10.2.0.1.0根据用户反映的...

weixin_36400512的博客 203

oracle 表在线重建,大表在线重建索引的考虑和碰到的限制问题-ORA-1450

本帖最后由 oudar 于 2016-7-10 10:26 编辑在线重建索引alter index rebuild online 报 ORA-1450平台:OS:SunOS **** 11.2 sun4v sparc sun4vDB:Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 - 64bit ProductPL/SQL Rel...

weixin_35993148的博客 682

转帖---oracle 索引何时需要重建问题的解决

关于索引何时需要重建,我在oracle文档中还没找到明确的说法,但可以通过一个视图(index_stats),参考里面的数值来判断是否需要重建。select name,del_lf_rows,lf_rows, round(del...

cnmcsdn8786的博客 216

oracle 位图索引重建,关于位图索引,带来的性能问题

本帖最后由 hupeng614 于 2012-5-24 09:13 编辑update /*+ parallel(a,10) */ Tb_b_ft_cstgrp_prd_inst_mon aset a.cust_group_id_01 = cust_group_id,a.cust_group_id_02 = cust_group_id,a.cust_group_id_03 = cust_grou...

weixin_39997310的博客 259

oracle.记一次由于索引长时间未重建导致的性能问题

问题描述 研发反应页面同步数据较慢,怀疑数据库原因 原因分析: 选取问题发现时间点awr报告查看 db time可以看出此节点负载已经较大 由于rac两节点有一个节点一直宕机,css等待时间忽略 sql执行时间耗时很多查看那些sql耗时过多 发现很多单条insert into语句耗时很长,结合db file sequential read等待事件,怀疑问题出现在表的索引上面 解决方案: 分析索引然后重建索引,数据库性能恢复正常 索引重建之后db time ..

bestinter2010的博客 380

oracle索引管理-online创建和重建索引

Create unique index idx1_col on table_NAME(COLUMN1,COLUMN2,….) LOCAL ONLINE; SELECT 'ALTER INDEX ' || OWNER || '.' || INDEX_NAME || ' REBUILD ONLINE;' EXEC_STATEMENT, STATUS FROM DBA_INDEXES WHERE STATUS = 'UNUSABLE' union all...

oradbm的博客 1632
上一篇: UEFI win7安装U盘的制作方式
下一篇: 理解java多态的概念和作用
Hack_Bug
博客等级 码龄15年 34粉丝 25原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值