– 查询是否需要重建索引:
– 分析索引的数据块是否有坏块,以及根据分析得到的数据(存放在index_stats)來判断索引是否需要重新建立。
sql> analyze index aatd_idx1 validate structure;
validate structure有二中模式:
online :(默认)会对表加一个4级別的锁(表共享),对run系統可能造成一定的影响。
offline :没有表lock的影响,但当以online模式分析时, 在视图index_stats没有统计信息。
从9i开始,oracle以建议使用dbms_stats package代替 analyze 了。
sql> exec dbms_stats.gather_table_stats(‘用户名’,‘表名’,cascade=>true);
– 下面视图只支持:analyze index 命令
sql> select height,del_lf_rows/lf_rows from index_stats;
height del_lf_rows/lf_rows
---------- -------------------
1 0
executed in 0.381 seconds
当查询出来的 height>=4
或者 del_lf_rows/lf_rows>0.2 的场合,该索引考虑重建
oracle的最终建议
一般而言,极少需要重建 b 树索引,基本原因是 b 树索引很大程度上可以自我管理或自我平衡。
大多数索引都能保持平衡和完整,因为空闲的叶条目可以重复使用。
插入/更新和删除操作确实会导致索引块周围的可用空间形成碎片,但是一般来说这些碎片都会被正确的重用。
clustering factor群集因子反映了给定的索引键值所对应的表中的数据排序情况。重建索引不会对群集因子产生影响,集群因子只能通过重组表的数据改变。
强烈建议不要定期重建索引,而应使用合适的诊断工具。
1、drop 原来的索引,然后再创建索引
删除索引:drop index ix_pm_usergroup;
创建索引:create index ix_pm_usergroup on t_pm_user (fgroupid);
说明:此方式耗时间,无法在24*7环境中实现,不建议使用。
2 、直接重建
alter index indexname rebuild; 或 alter index indexname rebuild online;
说明:此方式比较快,可以在24*7环境中实现,建议使用此方式
2.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)
2 、rebuild 会阻塞 dml 操作 ,rebuild online 不会阻塞 dml 操作
3 、rebuild online 时系统会产生一个 sys_journal_xxx 的 iot 类型的系统临时日志表,所有 rebuild online 时索引的变化都记录在这个表中 , 当新的索引创建完成后 , 把这个表的记录维护到新的索引中去 , 然后 drop 掉旧的索引 ,rebuild online 就完成了
注意点:
1、 执行rebuild操作时,需要检查表空间是否足够
2、虽然说rebuild online操作允许dml操作,但是还是建议在业务不繁忙时间段进行rebuild操作会产生大量redo log
重建分区表上的分区索引
alter index indexname rebuild partition partition_name tablespace tablespacename;
– 分区索引重建:
select 'alter index '|| index_name || ’ rebuild partition ‘|| partition_name || ’ online;’ from user_ind_partitions where index_name =‘索引’ ;
– 子分区索引重建:
alter index indexname rebuild subpartition partition_name tablespace tablespacename;
– sql 拼接
select 'alter index '|| index_name || ’ rebuild subpartition ‘|| subpartition_name || ’ online;’ from user_ind_subpartitions ;
注:这里的partition_name指user_ind_partitions中的partition_name(索引分区中的索引分区名);
–查询分区表索引所在的分区
select pi.table_name,
ip.index_name,
ip.partition_name,
ip.status,
ip.global_stats
from user_part_indexes pi, user_ind_partitions ip
where pi.index_name = ip.index_name and pi.table_name = ‘表名’;
– 统计信息收集索引:
sql> exec dbms_stats.gather_table_stats(ownname =>‘用户’ ,tabname =>‘表’ ,cascade => true );
文章推荐
postgresql | url |
---|---|
《课程笔记:postgresql深入浅出》之 初识postgresql(一) | https://www.modb.pro/db/475817 |
《课程笔记:postgresql深入浅出》之 postgresql源码安装(二) | https://www.modb.pro/db/475933 |
《课程笔记:postgresql深入浅出》之初始化postgresql(三) | https://www.modb.pro/db/479524 |
《课程笔记:postgresql深入浅出》之psql管理工具-常用(四) | https://www.modb.pro/db/479560 |
《课程笔记:postgresql深入浅出》之psql管理工具-高级命令(四) | https://www.modb.pro/db/479559 |
《课程笔记:postgresql深入浅出》之内存与进程(五) | https://www.modb.pro/db/489936 |
《课程笔记:postgresql深入浅出》之外存&永久存储(六) | https://www.modb.pro/db/502267 |
oracle: | url |
《oracle 自动收集统计信息机制》 | https://www.modb.pro/db/403670 |
《oracle_索引重建—优化索引碎片》 | https://www.modb.pro/db/399543 |
《dba_tab_modifications表的刷新策略测试》 | https://www.modb.pro/db/414692 |
《fy_recover_data.dbf》 | https://www.modb.pro/doc/74682 |
《oracle rac 集群迁移文件操作.pdf》 | https://www.modb.pro/doc/72985 |
《oracle date 字段索引使用测试.dbf》 | https://www.modb.pro/doc/72521 |
《oracle 诊断案例 :因应用死循环导致的cpu过高》 | https://www.modb.pro/db/483047 |
《oracle 慢sql监控脚本》 | https://www.modb.pro/db/479620 |
《oracle 慢sql监控测试及监控脚本.pdf》 | https://www.modb.pro/doc/76068 |
《oracle 脚本实现简单的审计功能》 | https://www.modb.pro/db/450052 |
greenplum: | url |
《pl/java.pdf》 | https://www.modb.pro/doc/70867 |
《gp的资源队列.pdf》 | https://www.modb.pro/doc/67644 |
《greenplum psql客户端免交互执行sql.pdf》 | https://www.modb.pro/doc/69806 |