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

相关推荐
Amarantine、沐风倩✨18 小时前
一次线上性能事故的处理复盘:从 SQL 到扩容的工程化思路
java·数据库·sql·oracle
电商API&Tina19 小时前
乐天平台 (Rakuten) 数据采集指南
大数据·开发语言·数据库·oracle·json
市场部需要一个软件开发岗位21 小时前
数据仓库相关内容分享
数据库·数据仓库·oracle
BullSmall1 天前
ACID 中的一致性
数据库·oracle
哭哭啼1 天前
oracle创建用户相关命令
数据库·oracle
Leon-Ning Liu1 天前
/*+ MATERIALIZE */ 优化器提示在 WITH 子句中的使用验证
oracle
资深数据库专家1 天前
EBS 中出现的“销售退货单库存已回冲,但生产成本未变化”的问题
人工智能·经验分享·oracle·微信公众平台·新浪微博
Apple_羊先森1 天前
ORACLE数据库巡检SQL脚本--13、临时表空间使用率
数据库·sql·oracle
数据库生产实战1 天前
Oracle隐藏参数_fix_control和_optimizer_improve_selectivity设置方法,如何用于规避性能问题?你值得看看!
数据库·oracle