Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >记录一则rebuild index消除索引碎片的效果

记录一则rebuild index消除索引碎片的效果

作者头像
星哥玩云
发布于 2022-08-16 08:44:58
发布于 2022-08-16 08:44:58
3750
举报
文章被收录于专栏:开源部署开源部署

背景:在一次某客户的停产维护中,有一项例行对大表rebuild索引的操作,本是按部就班的操作,其效果却出乎我的意料,大部分索引的效果前后都有4倍左右的变化,最大的那个索引前后居然差了7倍多,并且重建索引也没有用到压缩选项,这个与我之前的预期差距很大,化名记录下这个结果。

1. 重建索引

使用rebuild重建索引,因为是停产状态,无需加online选项: --rebuild index ALTER INDEX JINGYU.IDX_XXX_1 REBUILD NOCOMPRESS PARALLEL 4 TABLESPACE DBS_I_JINGYU STORAGE (INITIAL    64K);

--noparallel alter index JINGYU.IDX_XXX_1 noparallel; 

需要注意如果用到并行,结束后一定要记得取消并行度。

2.重建前后索引大小变化

比对重建前后索引的空间大小占用变化: --重建前索引空间: select owner, segment_name, bytes/1048576 "MB" from dba_segments where segment_name like 'IDX_XXX_1';

OWNER                          SEGMENT_NAME                          MB ------------------------------ ------------------------------ ---------- JINGYU                        IDX_XXX_1                      78749.125

--重建后索引空间: select owner, segment_name, bytes/1048576 "MB" from dba_segments where segment_name like 'IDX_XXX_1';

OWNER                          SEGMENT_NAME                          MB ------------------------------ ------------------------------ ---------- JINGYU                        IDX_XXX_1                      10795.4375

可以看到这个索引IDX_XXX_1从78749M变成了10795M,前后相差7倍之多,效果非常明显。其余大部分大表索引重建前后也有4倍左右的差距。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
ORA-01652: unable to extend temp segment by 8192...
      最近在rebuild index时提示unable to extend temp segment by 8192 in tablespace..的错误提示。这个是个比较常见的错误。索引在创建的时候需要使用到该用户缺省的临时表空间进行排序,以及在索引表空间生成临时段。如果当前的索引表空间限制了自动扩展或者已经达到了数据文件的最大值,此错误提示便会出现。下面是具体的分析及其解决过程。
Leshami
2018/08/13
1.5K0
Oracle数据库该如何着手优化一个SQL
这是个终极问题,因为优化本身的复杂性实在是难以总结的,很多时候优化的方法并不是用到了什么高深莫测的技术,而只是一个思想意识层面的差异,而这些都很可能连带导致性能表现上的巨大差异。 所以有时候我们应该先搞清楚需求到底是什么,SQL本身是否合理,这些思考很可能会使优化工作事半功倍。而本文是假设SQL本身合理,从Oracle提供给我们的一些技术手段来简单介绍下Oracle数据库,该如何使用一些现有的技术来优化一个SQL执行的性能。 确定需要优化的SQL文本及当前SQL执行计划 确定SQL涉及的所有表及其索引的相
Alfred Zhao
2018/05/11
9920
对象迁移表空间引出的三个小问题
我们有一个开发库,默认表空间是TEST_TBS,但今天查看开发库的时候,发现有些表和字段并不在用户默认使用的表空间中,而在USERS表空间,之所以可能是之前开发人员执行SQL是从其他库复制过来的,连通tablespace USERS名称一块复制了,为了规范,就需要将这些对象转移下表空间,期间碰见了几个常见的小问题,值得记录一下。
bisal
2019/01/30
5570
【迁移】Oracle分区表及索引迁移表空间
近期计划使用XTTS方式迁移某库,在进行自包含检查时发现,该库有部分数据(分区表、索引)存放于SYSTEM表空间中,需要先将这部分数据移动到要迁移的表空间中。
甚至熊熊
2021/04/22
2.7K0
避坑指南:通过expdp/impdp迁移数据的7个坑
墨墨导读:expdp/impdp是一个非常简单的操作,但是简单的操作中往往蕴藏了很多原理性的东西,如果稍不注意,则可能会才到很多坑。
数据和云
2020/08/21
4.5K0
Oracle 监控索引的使用率
    Oracle提供了索引监控特性来判断索引是否被使用。在Oracle 10g中,收集统计信息会使得索引被监控,在Oracle 11g中该现象不复存在。尽管如此,该方式仅提供的是索引是否被使用。索引被使用的频率未能得以体现。下面的脚本将得到索引的使用率,可以很好的度量索引的使用情况以及根据这个值来判断当前的这些索引是否可以被移除或改进。
Leshami
2018/08/14
1.4K0
关于收缩数据文件的尝试(r5笔记第34天)
在数据库中对于数据文件都是提前规划,不够就加的情况,很少会留意到其实有些数据文件那么大,其实条件允许也是可以收缩收缩的。 这种情况在本地测试环境中尤为突出,本来就用虚拟机跑个数据库,硬盘空间就够紧张,几十M几百M都是空间,都得“兆兆”计较。 今天在做dataguard的练习的时候,发现主库中的数据文件有些大,差不多4G左右,其实这个库里也没有装什么特别的东西,都是些测试表,完全可以清楚,使用dba_segments查看了下,有一个测试表在2G左右,占了不少的空间,基本一个数据文件都占完了。 FILE_NAM
jeanron100
2018/03/15
7450
Oracle数据块损坏篇之10231内部事件
实验:某个分区数据块损坏,不完全恢复此分区表数据 背景:数据库没有有效备份,某个分区中有数据块损坏。 要求:最大限度恢复此分区数据。 环境:RHEL 6.4 + Oracle 11.2.0.4
Alfred Zhao
2022/05/06
4230
Oracle-HWM(High Water Mark) 高水位解读
ORACLE在逻辑存储上分4个粒度 ,由大到小为: 表空间, 段, 区 和 块.
小小工匠
2021/08/16
3K0
Oracle架构设计
Oracle数据库的表空间管理可以说是非常简单和基础的一项维护工作,但是越简单的事情就越要制定统一的规范,这样数据库的各项管理工作才会愈加的简单高效。
Alfred Zhao
2019/05/24
6660
一次分区大表索引整改的案例分析(上)
在生产库上经常发现执行计划中索引选择不合适导致查询效率低下的情况,针对这种情况,我们可以采用重新收集统计信息(或设定统计信息)、绑定执行计划、增加hint写法(修改代码或后台增加hint)等技术手段来优化查询,但这些方法往往有一些前提条件,比如说统计信息过大无法及时收集需要配置定时任务,绑定的执行计划也不是很理想,绑定变量的值不同不能使用一种hint写法等,这样的结果倒推必须进行索引整改,以提高更好的查询效率,但如果涉及的是一张很大的分区表,索引整改必须很慎重,不然调整不理想可能会引起严重的性能问题,因此,本文想根据这个问题提供一种分析思路和操作步骤,使分区大表的索引调整的操作可以考虑得更全面些,更有效达到理想的查询效果。
IT大咖说
2019/05/14
9500
一次分区大表索引整改的案例分析(上)
数据清理的遗留问题处理(r6笔记第87天)
最近处理一个遗留问题,感觉手动修复真是让人抓狂,所以花了点力气写了一个半自动的脚本,总算从这个繁琐的工作中解放出来了。 问题的背景如下图所示。 存在一个很大的统计库(有容灾备库),还有一个历史统计库,
jeanron100
2018/03/16
6730
数据清理的遗留问题处理(r6笔记第87天)
Oracle 删除大量表记录操作总结
存放大数据量的表,其表空间占用也比较大,删除数据后并不会自动释放这些记录占用的表空间,所以,即便表里面数据量很少,查询效率依旧很慢,所以,需要释放表空间。
授客
2022/09/29
1.2K0
Oracle 系统表大全
数据字典dict总是属于Oracle用户sys的。   1、用户:    select username from dba_users;   改口令    alter user spgroup identified by spgtest;   2、表空间:    select * from dba_data_files;    select * from dba_tablespaces;//表空间
一见
2018/08/07
6510
Oracle move和shrink释放高水位空间
  alter table TABLE_NAME shrink space [compact|cascate]
星哥玩云
2022/08/17
2K0
Oracle段收缩功能
应用场景:如果对一张表频繁执行插入、更新和删除操作,时间长了可能会出现大量碎片,Oracle针对这种场景推出段收缩功能,以便减少碎片。 Oracle的段收缩执行两项不同的任务:
Alfred Zhao
2022/05/06
9960
收缩表段(shrink space)
--==================== -- 收缩表段(shrink space) --==================== 一、表的增长方式     当表被创建后,随着记录的不断插入,组成表的区间会被填满,如果启用了自动扩展,则当区间填满后,会分配新的区间。假定高水     位线随着记录的增加从最左端往右端来移动,当到底部区间的尾端时,则新的区间将会被分配。 二、表可收缩的原理     随着记录的增加高水位线不断的右移,记录的删除不会导致高水位线往回(左)移动     删除记录后的空闲空间(高水位线左侧)尽管可以使用,但其稀疏性导致空间空闲     注:完整的表扫描所耗费的时间不会因为记录的减少(删除)而减少 三、使用 alter table tbname shrink space 来收缩表段 1. 实现原理         实质上构造一个新表(在内部表现为一系列的DML操作,即将副本插入新位置,删除原来位置的记录)         靠近末尾处(右端)数据块中的记录往开始处(左端)的空闲空间处移动(DML操作),不会引起DML触发器         当所有可能的移动被完成,高水位线将会往左端移动(DDL操作)         新的高水位线右边的空闲空间被释放(DDL操作) 2. 实现前提条件         必须启用行记录转移(enable row movement)         仅仅适用于堆表,且位于自动段空间管理的表空间(堆表包括:标准表,分区表,物化视图容器,物化视图日志表) 3. 不能实现收缩的表         群集表         具有LONG类型列的表         LOB段(尽管表本身可以被缩小),注,10gR2以后版本支持对LOB段的收缩         具有基于提交的物化视图的表(因为禁用了触发器)         具有rowid物化视图的表(因为rowid发生了变化)         IOT映射表IOT溢出段         索引基于函数的表         未启用行记录转移的堆表 4. 段收缩的优点         提高缓存利用率,提高OLTP的性能          减少磁盘I/O,提高访问速度,节省磁盘空间          段收缩是在线的,索引在段收缩期间维护,不要求额外的磁盘空间 5. 两个选项         cascade:缩小表及其索引,并移动高水位线,释放空间         compact:仅仅是缩小表和索引,并不移动高水位线,不释放空间         alter table tbname shrink space 相当于带cascade参数 四、实战演习 1. 查看需要收缩的表段的基本情况,此处为表big_table
Leshami
2018/08/07
2.9K0
手动清理Oracle审计记录
a、对于Oracle 11g,审计功能默认被开启,因此如果在必须启用的情况下应考虑性能影响; b、开启审计的情况下,建议将审计从system或sysaux表空间剥离,使用单独的表空间; c、对于历史审计日志的清除,应考虑清除期间所带来的性能影响; d、调用DBMS_AUDIT_MGMT.SET_AUDIT_TRAIL_LOCATION这个过程已经开始了搬迁过程,如果审计日志很庞大,应考虑IO影响; e、审计日志的清除需要先设定归档,已归档的审计日志会被清理; f、也可以通过trunate table aud$ reuse storage以及deallocate非常规方式来处理。
Leshami
2018/08/13
1.8K0
Oracle-索引分裂研究
索引分裂(Index Block Split),就是索引块的分裂。当一次DML操作修改了索引块上的数据,但是旧有的索引块没有足够的空间去容纳新修改的数据时,将分裂出一个新的索引块,旧有块的部分数据放到新开辟的索引块上去,这个过程就称为索引块的分裂,简称索引分裂。
数据和云
2021/07/30
9520
Oracle online系列(下):online indexbuild
点击上方蓝色字关注我们~ online indexbuild (online create或者rebuild index)是Oracle的一个极其常用的online操作,我们知道当创建索引或者重建索引没有加online关键字的话,会请求表对象上的4号TM锁,而DML请求的是3号TM锁,3和4的TM锁并不兼容,所以在索引创建或者重建期间是无法进行DML操作的,等待事件为enq: TM – contention。 为了改进这一缺陷,在Oracle 8i推出了online indexbuild功能,并且在11.
数据和云
2022/03/04
1.3K0
相关推荐
ORA-01652: unable to extend temp segment by 8192...
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档