Oracle 12c中,通过延迟相关索引的维护可以优化某些DROP和TRUNCATE分区命令的性能,同时,保持全局索引为有效。

1.   设置

下面的例子演示带全局索引的表创建和加载数据的过程。

-- 建表

CREATE TABLE t1

(id            NUMBER,

comment   VARCHAR2(50),

crt_time  DATE)

PARTITION BY RANGE (crt_time)

(PARTITION part_14 VALUES LESS THAN (TO_DATE('01/01/2015', 'DD/MM/YYYY'))TABLESPACE users,

PARTITION part_15 VALUES LESS THAN(TO_DATE('01/01/2016', 'DD/MM/YYYY')) TABLESPACE users);

ALTER TABLE t1 ADD CONSTRAINT t1_pk PRIMARY KEY (id);

CREATE INDEX t1_idx ON t1 (crt_time);

--加载数据

INSERT /*+ APPEND */ INTO t1

SELECT level,

'commit for ' || level,

CASE

WHEN MOD(level,2) = 0 THENTO_DATE('01/07/2014', 'DD/MM/YYYY')

ELSE TO_DATE('01/07/2015','DD/MM/YYYY')

END

FROM   dual

CONNECT BY level <= 10000;

COMMIT;

EXEC DBMS_STATS.gather_table_stats(USER, 't1');

-- 检查索引

COLUMN table_name FORMAT A20

COLUMN index_name FORMAT A20

SElECT table_name,

index_name,

status

FROM   user_indexes

ORDER BY 1,2;

TABLE_NAME           INDEX_NAME           STATUS

-------------------- -------------------- --------

T1                   T1_IDX               VALID

T1                   T1_PK                VALID

SQL>

2.    全局索引异步维护

现在,DROP和TRUNCATE PARTITION命令和UPDATE_INDEXES一起使用时,只会导致相关元数据的变化。该功能目前只能用于堆表,不支持对象表,域索引或SYS用户的对象。

实际的索引维护稍后被执行,当满足如下之一的条件时。

  • SYS.PMO_DEFERRED_GIDX_MAINT_JOB作业每天2点被调度时。
  • 通过 DBMS_SCHEDULER.RUN_JOB手工运行SYS.PMO_DEFERRED_GIDX_MAINT_JOB时。
  • 运行DBMS_PART.CLEANUP_GIDX过程时。
  • 运行ALTER INDEX REBUILD [PARTITION]命令时。
  • 运行ALTER INDEX [PARTITION] COALESCE CLEANUP命令时。

Oracle12c前,如果我们DROP或TRUNCATE了一个分区,将会导致全局索引失效,UPDATE_INDEXES子句会导致操作期间索引重建,使得整个操作变慢。下例中,我们TRUNCATE一个分区,然后查看索引状态。

-- Truncate一个分区

ALTER TABLE t1 TRUNCATE PARTITIONpart_2014 DROP STORAGE UPDATE INDEXES;

ALTER TABLE t1 DROP PARTITION part_2014UPDATE INDEXES;

-- 查看索引状态

SElECT table_name,

index_name,

status

FROM  user_indexes

ORDER BY 1,2;

TABLE_NAME           INDEX_NAME           STATUS

-------------------- ----------------------------

T1                   T1_IDX               VALID

T1                   T1_PK                VALID

SQL>

视图USER_INDEXE中ORPHANED_ENTRIES新列显示索引还没被维护。

-- 检查是否需要索引维护

SELECT index_name,

orphaned_entries

FROM  user_indexes

ORDER BY 1;

INDEX_NAME           ORP

-------------------- ---

T1_IDX               YES

T1_PK                YES

SQL>如果我们手工触发索引维护,我们将会看到ORPHANED_ENTRIES列的变化

-- 手工触发索引维护

EXECDBMS_PART.cleanup_gidx(USER, 't1');

-- 查看是否需要索引维护

SELECT index_name,

orphaned_entries

FROM   user_indexes

ORDER BY 1;

INDEX_NAME           ORP

-----------------------

T1_IDX               NO

T1_PK                NO

SQL>

Oracle12c中性能优化&amp;功能增强新特性之全局索引DROP和TRUNCATE 分区的异步维护的更多相关文章

  1. Oracle12c中性能优化&amp;功能增强新特性之临时undo

    临时表最有意思的特点之一是undo段也存储在常规undo表空间中,而它们的undo反过来被redo保护,这会导致一些问题. 1)  写undo表空间需要数据库以读写模式打开,因此,只读数据库和物理备库 ...

  2. Oracle12c中性能优化&amp;功能增强新特性之重大突破——内存列存储新特性

    内存列存储(IM column store) 是Oracle12.1.0.2版本的主要特点.该特点允许列,表,分区和物化视图在内存中以列格式存储,而不是通常的行格式.数据存在内存中的好处显而易见,而列 ...

  3. Oracle12c(12.1)中性能优化&amp;功能增强之通过参数THREADED_EXECTION使用多线程模型

    1.   后台 UNIX/Linux系统上,oracle用多进程模型.例如:linux上一个常规安装的数据库会有如下进程列: $ ps -ef | grep [o]ra_ oracle  15356  ...

  4. Oracle12c中性能优化增强新特性之数据库智能闪存

    智能闪存功能最初在XD中引入.从Oracle11.2.0.2开始,除了用于XD存储,还可用于任何闪盘.Oracle12c中,不需卷管理器就可以使用闪盘. 1.  简介 智能闪存在solaris和lin ...

  5. Oracle12c功能增强 新特性之管理功能的增强

    1.    数据文件在线重命名和迁移 不想先前的版本号.在Oracle12cR1中,数据文件的迁移或重命名不再要求一系列的步骤,比如:将表空间至于仅仅读模式,然后数据文件逻辑等操作.在12cR1中.数 ...

  6. Oracle12c功能增强新特性之维护&amp;升级&amp;恢复&amp;数据泵等

    1.   内容提要 1)   表分区维护的增强. 2)   数据库升级改善. 3)   跨网络还原/恢复数据文件. 4)   数据泵的增强. 5)   实时ADDM. 6)   并发统计信息收集. 2 ...

  7. Oracle12c中数据删除(delete)新特性之数据库内归档功能

    有些应用有“标记删除”的概念,即不是删除数据,而是数据依然保留在表中,只是对应用不可见而已.这种需求通常通过如下方法实现: 1)  给相关表增加一个另外的列,该列存储标志数据被删除的标记. 2)  给 ...

  8. Oracle12c中性能优化新特性之新增APPROX_COUNT_DISTINCT 快速唯一值计数函数

    Oracle11g中,为了改善DBMS_STATS包收集统计信息时的唯一值计数功能,增加了 APPROX_COUNT_DISTINCT函数,但文档中未记载.Oracle12c文档中包括了该函数,因此, ...

  9. Oracle12c 中RAC功能增强新特性之ASM&amp;Grid

    1.    自动存储管理(ASM)方面的增强 1.1.   Flex ASM 在典型的网格架构安装中,每个节点有自己的ASM实例运行并扮演该节点上数据库的存储容器的角色,对这种安装配置,存在单点失败的 ...

随机推荐

  1. 高并发下,php使用uniqid函数生成唯一标识符的四种方案

    PHP uniqid()函数可用于生成不重复的唯一标识符,该函数基于微秒级当前时间戳.在高并发或者间隔时长极短(如循环代码)的情况下,会出现大量重复数据.即使使用了第二个参数,也会重复,最好的方案是结 ...

  2. Hive-复制表

    非分区表复制 复制一张非分区表,使用CREATE TABLE IF NOT EXISTS AS SELECT * FROM tb_name;只复制表结构,CREATE TABLE IF NOT EXI ...

  3. 20145206邹京儒《网络对抗技术》 PC平台逆向破解

    20145206邹京儒<网络对抗技术> PC平台逆向破解 注入shellcode并执行 一.准备一段shellcode 二.设置环境 具体在终端中输入如下: apt-cache searc ...

  4. 20145335郝昊《网络攻防》Exp7 网络欺诈技术防范

    20145335郝昊<网络攻防>Exp7 网络欺诈技术防范 实验内容 本次实践本实践的目标理解常用网络欺诈背后的原理,以提高防范意识,并提出具体防范方法. 简单应用SET工具建立冒名网站. ...

  5. 20145336 张子扬 《网络对抗技术》web基础

    20145336张子扬<网络对抗>Exp8 Web基础 实践内容 1.简单的web前端页面(HTML.CSS等) 2.简单的web后台数据处理(PHP) 3.Mysql数据库 4.一个简单 ...

  6. android 实践项目 总结 (修改)

    Android手机定位与地图实现 在一个不熟悉的环境中,获得自己的位置,选择合适的就餐地点,住宿和公交路线成为一项难题.本次的实践项目就是为了解决上述难题的,通过调用百度地图的接口实现定位.查询公交路 ...

  7. 矩阵二分快速幂优化dp动态规划

    矩阵快速幂代码: int n; // 所有矩阵都是 n * n 的矩阵 struct matrix { int a[100][100]; }; matrix matrix_mul(matrix A, ...

  8. Winform中使用折叠窗口

    使用此处的控件 http://www.codeproject.com/Articles/18401/XPanderControls 注意事项 使用之前需要先添加winform自带的toolStripC ...

  9. Luogu P1533 可怜的狗狗

    题目链接:https://www.luogu.org/problemnew/show/P1533 没人写$fhq\ treap$做法,那我就补一篇qwq 看到这题第一时间想主席树,然后发现我还没学主席 ...

  10. 【jdk源码分析】ArrayList的size()==0和isEmpty()

    先看结果 分析源码 [jdk源码解析]jdk8的ArrayList初始化长度为0 java的基本数据类型默认值 无参构造 size()方法 isEmpty()方法