Oracle19c分区表全局索引维护指南

引言

oracle19c分区表,如存在全局索引的情况下,在drop部分分区的情况下,如果不加update global indexes选项,全局索引会失效;必须加updata global indexes选项,在该选项下,全局索引不会失效,也不会当场更新,只是进行标记,然后跟随系统任务sys.PMO_DEFERRED_GIDX_MAINT_JOB进行更新索引,该任务默认是在每天的太平洋时间凌晨2:00执行,和系统统计信息任务类似。

该任务相关SQL如下:

1.删除分区语句

alter table MESHIS.RET_PRD_MTDT DROP partition SYS_P33602 UPDATE GLOBAL INDEXES;

alter table MESHIS.RET_PROJECT_INS_ITEM DROP PARTITION SYS_P31582 UPDATE GLOBAL INDEXES;

2.查看索引状态

--ORPHANED_ENTRIES(游离状态)字段为YES表示这个全局索引需要维护,默认在凌晨两点钟,会执行JOB对ORPHANED_ENTRIES为YES的全局索引进行统一的维护。可以从DBA_SCHEDULER_JOBS里查看到这个JOB的信息。

select TABLE_NAME,INDEX_NAME,STATUS,NUM_ROWS,ORPHANED_ENTRIES from dba_indexes where TABLE_NAME='T_TEST';

select TABLE_NAME,INDEX_NAME,STATUS,NUM_ROWS,ORPHANED_ENTRIES from dba_indexes where ORPHANED_ENTRIES='YES';

3.查看异步维护索引任务

select JOB_NAME,PROGRAM_NAME,LAST_START_DATE,NEXT_RUN_DATE from DBA_SCHEDULER_JOBS where JOB_NAME='PMO_DEFERRED_GIDX_MAINT_JOB';

select a.owner,a.job_name,a.REPEAT_INTERVAL,a.last_start_date,a.LAST_RUN_DURATION,a.next_run_date from dba_scheduler_jobs a where a.job_name='PMO_DEFERRED_GIDX_MAINT_JOB' ;

4.手动维护索引

假如业务是24H的,建议是进行挑选时间进行手动维护索引。

因为索引维护任务会产生大量redo日志,严重影响业务。

可以先设置index nologging减少日志量

ALTER INDEX MESHIS.RET_PROJECT_INS_ITEM_UNQ01 NOLOGGING ;

ALTER INDEX MESHIS.RET_PROJECT_INS_ITEM_UNQ01 LOGGING noparallel;

4.1方法1调用系统procedure

exec DBMS_PART.CLEANUP_GIDX('MESHIS','RET_PRD_MTDT');

4.2方法2调用系统任务立即执行

exec dbms_scheduler.run_job('PMO_DEFERRED_GIDX_MAINT_JOB');

4.3对索引进行清理

alter index MESHIS.SYS_C0037752 COALESCE CLEANUP parallel 8;

4.4重建索引

建议关闭undo自动拓展进行rebuild,不然tablespace会自动拓展很大。

alter index MESHIS.SYS_C0037752 rebuild online parallel 16 nologging;

alter index MESHIS.RET_PROJECT_INS_ITEM_UNQ01 rebuild parallel 16 nologging;

5.最后查看查看状态

select OWNER,TABLE_NAME,INDEX_NAME,STATUS,NUM_ROWS,ORPHANED_ENTRIES from dba_indexes

where TABLE_NAME='RET_PROJECT_INS_ITEM'

AND OWNER='MESHIS';

select bytes/1024/1024/1024 from dba_segments where segment_name ='RET_PROJECT_INS_ITEM_UNQ01';

SELECT degree FROM DBA_INDEXES WHERE INDEX_NAME ='SYS_C0037752';

小结:方法1-3不会降低index的高水位,方法4可以降低。

实际:

1.删除一个分区:进行方法3时,生成redo log量和整个索引大小差不多,时间

2.删除20个分区:进行方法4时,生成redo log量较整个索引大小稍多一点

6.手动搜集索引统计信息

exec dbms_stats.gather_index_stats('MESHIS','RET_PROJECT_INS_ITEM_UNQ01');

--这个调度会规定时间发起,对异步索引进行自动在线重建。

--先不说太平洋时间,也不说这个调度的好处(好处那太明显了),说说有什么问题:

--1、会产生大量归档日志

--2、全局索引维护,会引发gc问题

--3、引起其它锁问题

--不过,2、3都不太严重,1对io的压力比较明显,还可能导致归档目录预警,因此,这个调度,一定要放在夜间非繁忙时段进行(跳过后台跑批时间)。

相关推荐
ClouGence5 天前
Oracle 数据同步为什么会出现数据不一致?长事务是常被忽略的原因
数据库·后端·oracle
ClouGence11 天前
Oracle CDC 架构优化:从主库直连到 DataGuard 备库同步
数据库·后端·oracle
曹牧12 天前
Oracle EXPLAIN PLAN
数据库·oracle
贤时间12 天前
codex 助力oracle ebs 开发
数据库·oracle
秉承初心12 天前
PostgreSQL 数据性能瓶颈突破实战
数据库·postgresql·oracle
Curvatureflight12 天前
MySQL 深分页越来越慢?从 LIMIT OFFSET 改成游标分页
数据库·oracle
XZ-07000112 天前
MySQL事务
数据库·mysql·oracle
tiancaijiben12 天前
阿里云函数计算FC如何实现网站的定时任务与自动化
数据库·oracle·dba
xfhuangfu12 天前
Oracle 19c 多租户体系架构介绍
数据库·oracle·架构
杨云龙UP12 天前
Spotlight 接入 Oracle 数据库监控操作指南 2026-06-16
数据库·oracle·性能监控·预警·阈值·spotlight·瓶颈分析