Oracle12c中性能优化&功能增强新特性之全局索引DROP和TRUNCATE 分区的异步维护

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>

原文地址:https://www.cnblogs.com/lhdz_bj/p/8990769.html

时间: 2024-08-04 07:27:43

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

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

1.   内容提要 1)   表分区维护的增强. 2)   数据库升级改善. 3)   跨网络还原/恢复数据文件. 4)   数据泵的增强. 5)   实时ADDM. 6)   并发统计信息收集. 2.   表分区维护的增强 在其它文章中,我说明了怎样在线或离线把一个表分区或子分区移到一个不同的表空间. 这部分,你将学习和表分区相关的其它方面的增强. 2.1.  添加多个新分区. 12c R1之前,在一个已分区表上仅仅能一次添加一个分区.为了添加多个分区.你必须每添加一个新分区单独运行一个ALT

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

1.    自动存储管理(ASM)方面的增强 1.1.   Flex ASM 在典型的网格架构安装中,每个节点有自己的ASM实例运行并扮演该节点上数据库的存储容器的角色,对这种安装配置,存在单点失败的风险.例如,如果该节点上的ASM实例出现问题或失败,那么,运行在该节点上的数据库和实例都将会被影响.为了避免ASM实例的单点失败,Oracle12c 提供一个flex ASM特性.Flex ASM总体来说是个不同的概念和架构,其中,只需要几个ASM实例运行在簇中的一组服务器上,但一个节点上的ASM实

在Visual Studio 14 CTP中启用C# 6.0的新特性

今天看到Visual Studio 14 CTP版本已经发布了,支持了一些c++ 及C# 6.0的新特性,便下载下了尝鲜试了一下. C++到还好,使用C#的新特性就有点麻烦了,需要在csproj文件中加上这样一行才能使用     <LangVersion>experimental</LangVersion> 最开始我想写个VS插件来弄下.试了下找不到啥相关的API,便改写了一个小程序来转换它,使用了后还是觉得但文件太多时候很麻烦. 就干脆写了一个小程序把所有的模板中都添加了这一项,

网站建设过程中性能优化的34条经验方法

1 .减少HTTP请求数量 (Minimize HTTP Requests) tag:content 80%的用户响应时间被花费在前端,而这其中的绝大多数时间是用于下载页面中的图片.样式表.脚本以及Flash这些组件.减少这些组件的数量就可以减少展示页面所需的请求数,而这是提高网页响应速度的关键. 朴素的页面设计当然是减少组件的一种途径,但有没有能兼顾丰富的页面内容和快速的响应速度的方法呢?下面就是一些不错的技巧,能在提供丰富的页面展现的同时,减少Http请求数量: 合并文件,通过把所有脚本置于

Java中性能优化的45个细节

在JAVA程序中,性能问题的大部分原因并不在于JAVA语言,而是程序本身.养成良好的编码习惯非常重要,能够显著地提升程序性能. 1. 尽量在合适的场合使用单例 使用单例可以减轻加载的负担,缩短加载的时间,提高加载的效率,但并不是所有地方都适用于单例,简单来说,单例主要适用于以下三个方面: 控制资源的使用,通过线程同步来控制资源的并发访问: 控制实例的产生,以达到节约资源的目的: 控制数据共享,在不建立直接关联的条件下,让多个不相关的进程或线程之间实现通信. 2. 尽量避免随意使用静态变量 当某个

PHP5各个版本的新功能和新特性总结

因为 PHP 那“集百家之长”的蛋疼语法,加上社区氛围不好,很多人对新版本,新特征并无兴趣.本文将会介绍自 PHP5.2 起,直至 PHP5.6 中增加的新特征 本文目录:PHP5.2 以前:autoload, PDO 和 MySQLi, 类型约束PHP5.2:JSON 支持PHP5.3:弃用的功能,匿名函数,新增魔术方法,命名空间,后期静态绑定,Heredoc 和 Nowdoc, const, 三元运算符,PharPHP5.4:Short Open Tag, 数组简写形式,Traits, 内置

PHP7中我们应该学习会用的新特性

PHP7于2015年11月正式发布,本次更新可谓是PHP的重要里程碑,它将带来显著的性能改进和新特性,并对之前版本的一些特性进行改进.本文小编将和大家一起来了解探讨PHP7中的新特性. 1. 标量类型声明 我们知道PHP是一种弱类型的编程语言,因此没有提供任何方法来指定输入参数和返回值的类型,PHP7突破了这种现状,增加了对标量类型(int,float,string,bool)的声明支持,增加declare(strict_types=1)指令声明是否严格类型校验,我们来看一段代码: 1 decl

Java零基础系列002——命名、变量类型、类型转换、JDK中二进制整数和数字分隔符新特性

public class BasicDataType { public static void main(String[] args) { /* * 标示符:用于给变量.方法.类命名,必须以字母.下划线.$符号开头.以字母.下划线.数字.$符号组合,且不能为关键字 * * * */ System.out.println("--------------标示符------------"); int $,_,a;//正确的命名 int 彭驰=12;//由于Java内部采用Unicode编码方

H5 新特性之全局属性一

<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <title>Title</title></head><body> <!--<!DOCTYPE html>--><!--<html lang="en">--><!--<he