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的压力比较明显,还可能导致归档目录预警,因此,这个调度,一定要放在夜间非繁忙时段进行(跳过后台跑批时间)。

相关推荐
lusklusklusk15 小时前
Python 巡检脚本:进程运行状态、数据库写入时效检查及邮件通知与告警
数据库·python·oracle
悟道书生1 天前
Kingbase数据库使用命令来执行init.sql(包含建库建表语句)
数据库·oracle
晴天¥1 天前
记一次Oracle 归档进程卡死怎么去有效排查
数据库·oracle
梦幻通灵1 天前
MybatisPlus使用数据库递增ID实现方案【持续更新】
数据库·oracle
海鸥-w2 天前
数据库冗余字段设计笔记
java·数据库·笔记·oracle
实泽有之,无泽虚之2 天前
ORA-12514:TNS:监听程序当前无法识别连接描述符中请求的服务问题原因及解决办法
数据库·oracle
程序员塔塔喵2 天前
【MySQL篇|第十篇】深分页问题
数据库·oracle·深分页问题
qq_452396232 天前
第八篇:《VACUUM、自动清理与膨胀治理》
jvm·数据库·oracle
晴天¥2 天前
记录Oracle11g数据库OGG同步实验
oracle·oracle ogg·oracle高可用架构
晴天¥2 天前
Oracle集群中是该如何管理控制文件和日志文件组?
数据库·oracle