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. CocoaPods的安装及使用

    CocoaPods安装使用及配置私有库 http://www.exiatian.com/cocoapods%E5%AE%89%E8%A3%85%E4%BD%BF%E7%94%A8%E5%8F%8A%E ...

  2. C#调用非托管dll

    以C#开发周立功CAN举例,在官网下载了周立功的demo 一.C++头文件样子 //接口卡类型定义#define VCI_PCI5121 1 //一些结构体定义 typedef struct tagR ...

  3. Python3基础 os.path.getsize 获得文件的大小

             Python : 3.7.0          OS : Ubuntu 18.04.1 LTS         IDE : PyCharm 2018.2.4       Conda ...

  4. 日志统计|2018年蓝桥杯B组题解析第八题-fishers

    标题:日志统计 小明维护着一个程序员论坛.现在他收集了一份"点赞"日志,日志共有N行.其中每一行的格式是: ts id 表示在ts时刻编号id的帖子收到一个"赞" ...

  5. ElasticSearch 5.4 安装

        1. 前期准备  环境准备 IP地址 操作系统 内存 192.168.1.10 centos 7 16 192.168.1.11 centos 7 16 192.168.1.12 centos ...

  6. C++小结:迟到的小结和重新起航的故事

    迟到的小结和重新起航的故事 有关这个学期的故事,随着这个学期的结束也划上了一个句号. 正如之前博客里面(还是空间里面)提到的,在这个过程中的收获比最后考试的结果更重要. 就像这次的计算器,也许会对最后 ...

  7. BZOJ 1006: [HNOI2008]神奇的国度(弦图染色)

    http://www.lydsy.com/JudgeOnline/problem.php?id=1006 题意: 思路: 这个就是弦图染色问题,弦图啥的反正我也不懂,具体看论文https://wenk ...

  8. 【NOI2013】小Q的修炼

    题目链接:http://uoj.ac/problem/123 又开提答坑啦,要不是一定要讲题谁他妈要这样伤害自己 CASE 1,2 首先可以打一个通用暴力,用于模拟操作过程,对于每一个操作随机一个选择 ...

  9. js 捕捉滚轮的滚动

    滚动方向区分为正负: <!DOCTYPE html> <html> <head lang="en"> <meta charset=&quo ...

  10. ubuntu 14.04(desktop amd 64) nginx 安装启动停止

    sudo apt-get install nginx 关闭: sudo service nginx stop 启动: sudo nginx