FAST SPLIT PARTITION 快速分割分区

How to Perform a FAST SPLIT PARTITION Using ALTER TABLE? (Doc ID 1268714.1)

快速分割分区,就是如果最大的分区全部满足新split分区的条件,直接把最大的这个改名,再新加一个max分区出来。这样可以避免partition分区index的unsable,global index是否也是好的?

The Article:   [ID 378138.1] states:

According to the documentation:

"Fast split partitioning takes advantage of those situations in which a split partition results in all rows being moved to a single partition. If all the rows map into a single partition and if the segment attributes of the old partition and the segment attributes of the partition inheriting all the rows match, then the database simply reuses the old segment and adds an empty segment for the other partition. Another benefit of this is that global indexes do not have to be invalidated and, in certain cases, local index partitions corresponding to the new partitions are also usable."

Thus, the new partitions should have the same storage configuration as the original partition.

This last statement has been the reason for the worked example below.

SOLUTION

NOTE: In the images and/or the document content below, the user information and data used represents fictitious data from the Oracle sample schema(s) or Public Documentation delivered with an Oracle database product. Any similarity to actual persons, living or dead, is purely coincidental and not intended in any manner.

This has been tested on 10.2.0.5 and 11.2.

Logon to sqlplus

connect rk_mview/pwd

Create the partitioned table to work on.

drop TABLE test;

CREATE TABLE test
( GPS_GUID RAW(16) DEFAULT (sys_guid()) NOT NULL ENABLE,
DVC_ID NUMBER(12,0) NOT NULL ENABLE,
USR_ID NUMBER(12,0) NOT NULL ENABLE,
ENTRY_UTC TIMESTAMP (6) DEFAULT (SYS_EXTRACT_UTC(SYSTIMESTAMP)) NOT NULL ENABLE,
COVERAGE_STAT_ID NUMBER(12,0) NOT NULL ENABLE,
SPEED FLOAT(126) DEFAULT (0),
DIRECTION FLOAT(126) DEFAULT (0),
ESTIMATED_ACCURACY NUMBER(12,0),
UPDATE_UTC TIMESTAMP (6) DEFAULT (SYS_EXTRACT_UTC(SYSTIMESTAMP)) NOT NULL ENABLE,
LATITUDE FLOAT(126),
LONGITUDE FLOAT(126),
TS_GUID RAW(16),
CLUSTER_ID VARCHAR2(50),
GEOCODE_UTC TIMESTAMP (6),
STREET NVARCHAR2(100),
SUITE VARCHAR2(50),
CITY NVARCHAR2(100),
STATE_PROVINCE NVARCHAR2(100),
POSTAL_CODE NVARCHAR2(20),
COUNTRY NVARCHAR2(100),
CONSTRAINT PK_GPS PRIMARY KEY (GPS_GUID)
USING INDEX PCTFREE 5 INITRANS 10 MAXTRANS 255 COMPUTE STATISTICS
STORAGE(INITIAL 1M NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT)
TABLESPACE users ENABLE
) PCTFREE 30 PCTUSED 0 INITRANS 10 MAXTRANS 255
STORAGE(BUFFER_POOL DEFAULT)
TABLESPACE users
PARTITION BY RANGE (ENTRY_UTC)
(PARTITION GPS_DATA_2010_08_08 VALUES LESS THAN (TIMESTAMP'2010-08-08 00:00:00')
PCTFREE 5 PCTUSED 0 INITRANS 10 MAXTRANS 255
STORAGE(INITIAL 1M NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT)
TABLESPACE users NOCOMPRESS ,
PARTITION GPS_DATA_2010_08_15 VALUES LESS THAN (TIMESTAMP'2010-08-15 00:00:00')
PCTFREE 5 PCTUSED 0 INITRANS 10 MAXTRANS 255
STORAGE(INITIAL 1M NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT)
TABLESPACE users NOCOMPRESS ,
PARTITION GPS_DATA_MAX VALUES LESS THAN (MAXVALUE)
PCTFREE 5 PCTUSED 0 INITRANS 10 MAXTRANS 255
STORAGE(INITIAL 1M NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT)
TABLESPACE users NOCOMPRESS ) ENABLE ROW MOVEMENT;



insert into test values ('2',2,2,TIMESTAMP'2010-11-14 00:00:00',1,1,1,1,TIMESTAMP'2010-11-14 00:00:00',1,1,'1','1',TIMESTAMP'2010-11-14 00:00:00','1','1','1','1','1','1');
commit;

BEGIN
DBMS_STATS.gather_table_stats ('schema name',
'test',
partname => 'GPS_DATA_MAX',
granularity => 'PARTITION',
estimate_percent => 3,
DEGREE => 2 );
END;
/


In the above situation we can see that the row inserted has been added to the MAX partition, due to missing partitions.  Therefore to provide further partitions to avoid the use of the MAX partition we will need to add a partition immediately before this MAX partition.  We can use the SPLIT PARTITION syntax and this will actually perform a FAST SPLIT if all the data ends up in only one of the partitions.
 

Gather Statistics on the MAX partition to review the num_rows and to ensure a FAST SPLIT optimization occurs.

BEGIN
DBMS_STATS.gather_table_stats ('schema name',
'test',
partname => 'GPS_DATA_MAX',
granularity => 'PARTITION',
estimate_percent => 3,
DEGREE => 2 );
END;
/


 

Select Queries utilized to validate the split has occurred:

select FILE_ID,EXTENT_ID,BLOCK_ID from dba_extents where PARTITION_NAME='GPS_DATA_MAX';

select table_name,PARTITION_NAME, num_rows from dba_tab_partitions where table_name='test';


Now to run the actual split:
Note.  Normally this will create 2 partitions and then move the data to each based on the partition boundaries.  For a FAST SPLIT this will add a new partition and leave the data in the partition where the data fits.


ALTER TABLE test SPLIT PARTITION
GPS_DATA_MAX AT ((TIMESTAMP'2010-11-28 00:00:00 +0:00'))
INTO ( PARTITION GPS_DATA_2010_11_28
LOGGING
NOCOMPRESS
TABLESPACE users
PCTFREE 5
INITRANS 10
MAXTRANS 255
STORAGE (
INITIAL 1M
MINEXTENTS 1
MAXEXTENTS UNLIMITED
BUFFER_POOL DEFAULT
) ,
PARTITION GPS_DATA_MAX );

 


Proof the split has occurred:

BEFORE the split:

select FILE_ID,EXTENT_ID,BLOCK_ID,PARTITION_NAME from dba_extents where segment_NAME='test';

FILE_ID EXTENT_ID BLOCK_ID PARTITION_NAME
---------- ---------- ---------- ------------------------------
4 0 27657 GPS_DATA_2010_08_08
4 0 27785 GPS_DATA_2010_08_15
4 0 27913 GPS_DATA_MAX


select table_name,PARTITION_NAME, num_rows from dba_tab_partitions where table_name='test';

TABLE_NAME PARTITION_NAME NUM_ROWS
------------------------------ ------------------------------ ----------
GPS GPS_DATA_2010_08_08
GPS GPS_DATA_2010_08_15
GPS GPS_DATA_MAX              1


AFTER the split

select FILE_ID,EXTENT_ID,BLOCK_ID,PARTITION_NAME from dba_extents where segment_NAME='test';

FILE_ID EXTENT_ID BLOCK_ID PARTITION_NAME
---------- ---------- ---------- ------------------------------
4 0 27657 GPS_DATA_2010_08_08
4 0 27785 GPS_DATA_2010_08_15
4 0 27913 GPS_DATA_2010_11_28
4 0 26377 GPS_DATA_MAX

select table_name,PARTITION_NAME, num_rows from dba_tab_partitions where table_name='test';

TABLE_NAME PARTITION_NAME NUM_ROWS
------------------------------ ------------------------------ ----------
GPS GPS_DATA_2010_08_08
GPS GPS_DATA_2010_08_15
GPS GPS_DATA_MAX                0
GPS GPS_DATA_2010_11_28         1


 


So we can see from the above that the MAX partition has indeed become the new partition, and a new MAX has been added.  So a fast split has occurred.

Confirmed FAST SPLIT Syntax

ALTER TABLE test SPLIT PARTITION
GPS_DATA_MAX AT ((TIMESTAMP'2010-11-20 00:00:00 +0:00'))
INTO ( PARTITION GPS_DATA_2010_11_20
LOGGING
NOCOMPRESS
TABLESPACE users
PCTFREE 5
INITRANS 10
MAXTRANS 255 -- This is the one that works. The pctfree, initrans and maxtrans outside the storage clause.
STORAGE
(INITIAL 1M NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
BUFFER_POOL DEFAULT),
PARTITION GPS_DATA_MAX );

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/37711.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Nginx配置referer报错大坑:unknown directive “valid_referers“

错误: nginx: [emerg] unknown directive "if($invalid_referer)" in /usr/local/nginx/conf/nginx.conf:27 代码: 设置有效的refer值 none:检测地址没有refer,则有效server_name:检测主机地址&#xf…

KV260视觉AI套件--开箱报告

目录 1. 简介 2. 与 Zynq 的渊源 3. 官方的入门步骤 4. 总结 1. 简介 传统的ARMFPGA或DSPFPGA控制方案在软件、逻辑、硬件以及系统工程的协同调试中,往往需要团队成员之间严格按照预定计划和接口规范进行分工合作,这不仅增加了测试过程的复杂性&…

求一个集合里面的所有子集 使用c++

#include <iostream> // 包含输入输出流头文件 #include <vector> // 包含vector容器头文件 #include <cmath> // 包含数学函数头文件&#xff0c;用于pow函数using namespace std; // 使用std命名空间&#xff0c;避免每次都写std::// 定义生成幂集…

《概率论与数理统计》期末复习笔记_上

目录 第1章 随机事件与概率 1.1 随机事件 1.2 事件的关系与运算 1.3 概率的定义与性质 1.4 古典概型_重点 1.5 几何概型 1.6 条件概率与乘法公式 1.7 全概率公式与贝叶斯公式_重点 1.8 事件的独立性_重点 1.9 伯努利概型_重难点 第2章 随机变量及其分布 2.1 随机变…

实验2 色彩模式转换

1. 实验目的 ①了解常用的色彩模式&#xff0c;理解色彩模式转换原理&#xff1b; ②掌握Photoshop中常用的颜色管理工具和色彩模式转换方法&#xff1b; ③掌握使用Matlab/PythonOpenCV编程实现色彩模式转换的方法。 2. 实验内容 ①使用Photoshop中的颜色管理工具&#xff…

Dubbo 简单入门

Dubbo 简单入门 Dubbo 是一个高性能的分布式服务框架&#xff0c;旨在解决微服务架构下的 RPC&#xff08;远程过程调用&#xff09;问题。其核心原理包括服务注册与发现、通信协议、负载均衡、容错机制等。以下是对这些核心原理的详细讲解&#xff1a; 1. 服务注册与发现 服…

Kafka~消息系列问题解决:消费顺序问题解决、消息丢失问题优化(不能保证100%)

消息消费顺序问题 使用消息队列的过程中经常有业务场景需要严格保证消息的消费顺序&#xff0c;比如我们同时发了 2 个消息&#xff0c;这 2 个消息对应的操作分别对应的数据库操作是&#xff1a; 用户等级升级。根据用户等级下的订单价格 假如这两条消息的消费顺序不一样造…

第0章_项目方案介绍

文章目录 第0章 项目方案介绍0.1 功能介绍0.2 硬件方案0.3 软件方案0.3.1 上位机方案0.3.2 **中控方案**0.3.3 **传感器方案**0.3.4 **技术难点** 第0章 项目方案介绍 0.1 功能介绍 本课程来自一个真实项目&#xff1a;多个气体传感器的管理。由于气体传感器比较昂贵&#xf…

比尔盖茨:Agent将是AI最大的赛道

Agent不仅将改变人们与计算机的互动方式&#xff0c;还将颠覆软件行业&#xff0c;引发自从我们从键入命令到点击图标以来计算机领域的最大革命。 保罗艾伦和我一起创立微软的至今&#xff0c;我对软件的热爱至今依然不减。 然而&#xff0c;尽管在过去的几十年中软件已经取得…

Vue.js 和 Node.js 全栈项目的运行与部署指南

Vue.js 和 Node.js 全栈项目的运行与部署指南 前言具体运行方式导入数据库初始化安装配置nodejs启动server后端启动client前端确保前后端正确连接 前言 本博客用来介绍一下一个包含前端和后端代码的全栈项目MoreMall&#xff0c;前端部分使用了 Vue.js&#xff0c;后端部分使用…

多阶段分层构建容器化Spring Boot应用程序

上一节中&#xff0c;容器化spring boot应用程序-CSDN博客我们介绍了基于简单的Dockerfile对spring boot进行容器化的过程&#xff0c;本讲将介绍如何基于Dockerfile进行多阶段的分层构建过程&#xff0c;希望对大家有所帮助。 Spring Boot从版本2.3.0开始支持分层构建容器化的…

Mysql中varchar类型数字排序不对踩坑记录

场景 在进行表设计时将版本号字段设计了为varchar类型&#xff0c;尽量从表设计阶段将数字类型列设计为int型。 再进行排序时如果版本号累计到了10及以上&#xff0c;那么再进行排序时则会出现问题。 比如下面执行排序时发现10被排在了第一位。 这是因为 varchar类型对数字…

51单片机第8步_absacc.h库函数

本章重点学习库函数absacc.h的使用,介绍绝对宏和绝对地址的用法。故事有点老掉牙&#xff0c;但学校的教授们还在继续。 #include <REG52.h> //包含头文件REG52.h,使能51内部寄存器; #include <absacc.h> #include <stdio.h> //包含头文件stdio.h //_get…

已备案网站变更并且不影响现有业务的方案

已备案网站变更并且不影响现有业务的方案 近日有个工作上的需求&#xff0c;已备案网站变更并且不影响现有业务&#xff0c;记录一下。 需求 域名&#xff1a;XXXXXX.com备案变更前主体&#xff1a; 海南XXXXXX科技有限公司 备案变更后主体&#xff1a; 深圳XXXXXX科技有限…

【05】从0到1构建AI生成思维导图应用 -- 前端交互实现

【05】从0到1构建AI生成思维导图应用 – 前端交互实现 大家好&#xff01;最近自己做了一个完全免费的AI生成思维导图的网站&#xff0c;支持下载&#xff0c;编辑和对接微信公众号&#xff0c;可以在这里体验&#xff1a;https://lt2mind.zeabur.app/ 上一章&#xff1a;http…

【图解大数据技术】Hive、HBase

【图解大数据技术】Hive、HBase Hive数据仓库Hive的执行流程Hive架构数据导入Hive HBaseHBase简介HBase架构HBase的列式存储HBase建表流程HBase数据写入流程HBase数据读取流程 Hive Hive是基于Hadoop的一个数据仓库工具&#xff0c;Hive的数据存储在HDFS上&#xff0c;底层基于…

Linux 常用命令 - dd 【复制及转换文件内容】

简介 dd 命令源自于磁盘复制&#xff08;disk dump&#xff09;的缩写&#xff0c;是 Linux 和 Unix 系统中用于转换和复制文件的一个强大工具。它可以在复制过程中进行格式转换&#xff0c;支持不同的块大小&#xff0c;能够直接对硬盘设备进行操作&#xff0c;非常适合进行备…

android里面json操作

1.读取assets下面xzhd/aikit/pck.json String json = null; try { InputStream is = activity.getAssets().open(aikitPathInData+"xzhd/aikit/pck.json"); int size = is.available(); byte[] buffer = new byte…

容器进程

一、容器进程和宿主机进程的关系 容器在进程空间上和宿主机是隔离的&#xff0c;每创建一个容器&#xff0c;该容器都有一个独属的进程空间简称PID NameSpace。但是容器本质也是一个进程&#xff0c;自然是由其父进程创建的&#xff0c;这个可以使用ps aux命令验证。 | 容器视…

Windows 下写C++代码的必备

在 Windows 下写代码&#xff0c;还需要用到 Windows.h 头文件的话&#xff0c;需要记住以下两点&#xff1a; 一定要 predefine 一个宏&#xff0c;NOMINMAX&#xff0c;禁用掉 windows 定义的 min 和 max 宏 #include <winsock.h> #define WIN32_LEAN_AND_MEAN #defin…