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

相关推荐
ERD Online7 小时前
MySQL/Oracle/PG/SQLServer 存量库一键逆向成关系图
mysql·oracle·sqlserver
奇树谦1 天前
《现代 Key-Value 数据库原理:从 B+Tree 到 LSM Tree》-第三篇:LMDB 深度解析二
数据库·oracle·lsm-tree
提笔了无痕1 天前
Agent 上下文管理详解、Context设计与构建
数据库·oracle·agent·context
沉下去,苦磨练!1 天前
Human‑in‑the‑Loop
数据库·oracle
小黑技术栈1 天前
web前端基础到入门——14day
前端·数据库·oracle
todoitbo2 天前
把发票台账接进 Codex:KingbaseES MCP 的一次只读风险排查实践
数据库·oracle·codex·kingbasees·mcp
暗暗别做白日梦2 天前
CompletableFuture 并发统计
网络·数据库·oracle
TDengine (老段)2 天前
TDengine 认证与权限 — 用户、角色、RBAC
大数据·数据库·物联网·oracle·时序数据库·tdengine·涛思数据
晴天¥2 天前
记一次Oracle集群归档日志爆满之后如何处理(涉及ASM磁盘的增添。有坑必踩)
数据库·oracle
Hoxy.R2 天前
记录一次Oracle 19c RAC iSCSI会话反复重连:comm error (1020) 原因定位与解决
数据库·oracle