Oracle 分区默认segment大小变化(64k—>8M)
_partition_large_extents和_index_partition_large_extents
alter system set "_partition_large_extents"=false;
alter system set "_index_partition_large_extents"=false;
参考:
http://www.xifenfei.com/2013/08/%E5%88%86%E5%8C%BA%E9%BB%98%E8%AE%A4segment%E5%A4%A7%E5%B0%8F%E5%8F%98%E5%8C%9664k-8m.html
从11.2.0.2开始创建分区表,每个分区默认大小为8M,是由_partition_large_extents参数控制,可以算是11.2.0.2开始的一个新特性,为了减少extent数量,提高分区表性能,而引入的一个参数,默认为true,即分区表的每个extent为8M,这里对于_partition_large_extents为true和false的情况进行了测试。
例1:
数据库参数情况如下:
SQL> select * from v$version;
BANNER
--------------------------------------------------------------------------------
Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production
PL/SQL Release 11.2.0.4.0 - Production
CORE 11.2.0.4.0 Production
TNS for Linux: Version 11.2.0.4.0 - Production
NLSRTL Version 11.2.0.4.0 - Production
SQL> alter system set "_partition_large_extents"=true;
System altered
SQL> alter system set "_index_partition_large_extents"=true;
System altered
SQL> show parameter _partition_large_extents
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
_index_partition_large_extents string TRUE
_partition_large_extents string TRUE
SQL> show parameter deferred_segment_creation--是否启用延迟段
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
deferred_segment_creation boolean FALSE
1)创建分区表:
CREATE TABLE Table1001
(
idd INT,
iNAME VARCHAR(10),
grade INT
)
PARTITIONBYRANGE(grade)
(
PARTITION part1 VALUESLESSTHAN(10)TABLESPACEtest,
PARTITION part2 VALUESLESSTHAN(MAXVALUE)TABLESPACEtest
);
2)穿件普通表
CREATETABLE table1002
(
idd INT,
iNAME VARCHAR(10),
grade INT
)TABLESPACETEST;
3)创建索引
createindex ind1 on table1001(idd)local tablespacetest;
createindex ind2 on table1002(idd) tablespace test;
createindex ind3 on table1001(iname) tablespace test;
createindex ind4 on table1002(iname) tablespace test;
查询segment视图,确定初始创建表所占空间大小:
select t.segment_name,
t.partition_name,
t.tablespace_name,
t.bytes /1024/1024||'m',
t.blocks,
t.extents
from dba_segments t
where t.tablespace_name ='TEST';
SEGMENT_NAME PARTITION_NAME TABLESPACE_NAME T.BYTES/1024/1024||'M' BLOCKS EXTENTS
-------------------------------------------------------------------------------- -----------------------------
IND1 PART2 TEST 8m 1024 1
IND1 PART1 TEST 8m 1024 1
IND2 TEST 0.0625m 8 1
IND3 TEST 0.0625m 8 1
IND4 TEST 0.0625m 8 1
TABLE1001 PART2 TEST 8m 1024 1
TABLE1001 PART1 TEST 8m 1024 1
TABLE1002 TEST 0.0625m 8 1
结论:从例1可以得出结论,在11.2.0.4版本中,当参数_partition_large_extents等于true时(此时可能不可见),创建分区表默认占用空间大小为每个分区8m,而普通表默认占据空间大小仅0.0625m(64k)。而当_index_partition_large_extents为true时,创建分区索引时,默认分区大小为8m,而创建普通索引默认大小为64k。
例2:
SQL> alter system set "_partition_large_extents"=false;
System altered
SQL> alter system set "_index_partition_large_extents"=false;
System altered
SQL> show parameter _partition_large_extents
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
_index_partition_large_extents string FALSE
_partition_large_extents string FALSE
SQL> show parameter deferred_segment_creation
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
deferred_segment_creation boolean FALSE
创建分区表:
CREATETABLE Table1001
(
idd INT,
iNAME VARCHAR(10),
grade INT
)
PARTITIONBYRANGE(grade)
(
PARTITION part1 VALUESLESSTHAN(10)TABLESPACEtest,
PARTITION part2 VALUESLESSTHAN(MAXVALUE)TABLESPACEtest
);
创建普通表:
CREATETABLE table1002
(
idd INT,
iNAME VARCHAR(10),
grade INT
)TABLESPACETEST;
创建索引:
createindex ind1 on table1001(idd)localtablespacetest;
createindex ind2 on table1002(idd)tablespacetest;
createindex ind3 on table1001(iname)tablespacetest;
createindex ind4 on table1002(iname)tablespacetest;
查询segment视图,确定初始创建表所占空间大小:
select t.segment_name,
t.partition_name,
t.tablespace_name,
t.bytes /1024/1024||'m',
t.blocks,
t.extents
from dba_segments t
where t.tablespace_name ='TEST';
SEGMENT_NAME PARTITION_NAME TABLESPACE_NAME T.BYTES/1024/1024||'M' BLOCKS EXTENTS
-------------------------------------------------------------------------------- -----------------------------
IND1 PART2 TEST 0.0625m 1024 1
IND1 PART1 TEST 0.0625m 1024 1
IND2 TEST 0.0625m 8 1
IND3 TEST 0.0625m 8 1
IND4 TEST 0.0625m 8 1
TABLE1001 PART2 TEST 0.0625m 1024 1
TABLE1001 PART1 TEST 0.0625m 1024 1
TABLE1002 TEST 0.0625m 8 1
结论:通过测试证明,设置_partition_large_extents参数确实是能够控制分区表的extent大小,而且对于分区表,deferred_segment_creation虽然为true,但是在一个分区表中如果有一个子分区插入了记录,那么其他子分区会同时创建segment.对于数据量不多,而且数据大量集中在某几个分区,那强烈建议设置_partition_large_extents为false,节约空间.如果数据量较大,而且数据分布较为均匀,建议设置_partition_large_extents为true.另外对于分区的index也有同样意义的参数为_index_partition_large_extents。
可以看到在11.2.0.2 以后_partition_large_extents参数默认打开(default : TRUE),创建的初始化分区大小为8M。
实际该特性可能在导致以下2个问题:
若配合deferred_segment_creation=false使用则创建具有大量分区的表时,耗时大幅增长
若配合deferred_segment_creation=false使用则建好后空表的所占空间为8M*分区数目,对比关闭该特性的情况会大非常多
转载于:https://www.cnblogs.com/wcwen1990/p/6656545.html
Oracle 分区默认segment大小变化(64k—>8M)的更多相关文章
- 分区默认segment大小变化(64k—>8M)
_partition_large_extents和_index_partition_large_extents 参考: http://www.xifenfei.com/2013/08/%E5%88%8 ...
- 分区默认segment大小变化(64k—>8M)
_partition_large_extents和_index_partition_large_extents 参考: http://www.xifenfei.com/2013/08/%E5%88%8 ...
- Oracle体系结构之Oracle分区
目录 Oracle分区 0 一.Oracle分区理论知识 1 二.分区表的实现方式 1 1.范围分区(range partition table) 1 2.列表分区(list partitioning ...
- [转载]Oracle修改表空间大小
Oracle修改表空间大小 使用Oracle10g建立数据库后,向数据库中导入了部分数据,第二天继续向数据库中导入数据表时发生错误: 查了很多资料发现原来是Oracle表空间限制,导致无法继续导入数据 ...
- delphi 窗口最大化后控件的大小变化怎么设置
设置按钮的Anchors属性.可以通过此属性设置其边界是否随父类一起变化.默认akleft+aktop即左边界和上边界随窗口变化,也就是说如果窗口位置移动了,按钮将保持其left和top边界与窗口的距 ...
- oracle 分区和分区索引
一.个人理解:建表时一般都会指定在一个表空间上,但是可能随着表空间扩大,查询越来越慢,分区表就是将一个表实际存在不同的表空间,oracle存储分为块,断,表空间.新建一个表,会给表分配指定大小的段,段 ...
- 修改oracle数据库默认时间格式
原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://ccchencheng.blog.51cto.com/2419062/929695 ...
- Linux系统之更改默认块大小
查看操作系统块大小:#tune2fs -l /dev/sda1 |grep 'Block size' ( tune2fs -l /dev/sda1可以查看更多相关文件 ...
- 01 Oracle分区索引
Oracle分区索引 索引与表类似,也可以分区: 分区索引分为两类: Locally partitioned index(局部分区索引) Globally partitioned index(全局 ...
随机推荐
- STVD生成hex,bin,显示ram&flash的使用情况
前言: 虽然stvd免费,但使用起来并不令人满意,不能自动补全,界面丑陋,设置繁琐,最难受的是不会自动输出ram和flash的使用情况.当然方法还是有的,下面就讲讲我是怎么实现的.个人水平有限,如有错 ...
- elasticsearch内存不断增长问题
经过一段时间运行,es的索引已经达到数十G以上.es采用mmap的方式将索引文件映射到内存中,随着检索的次数增加,越来越多的数据被操作系统读入到内存中.这部分内存位于系统中,但是又不归es管理,也就是 ...
- kafka学习笔记(二)——基础入门
1.集群规划 从官网下载jar包 http://kafka.apache.org/downloads.html,我选择的是kafka_2.11-0.11.0.0.tgz版本 规划一下集群环境先~ ha ...
- 在win10上安装FFmpeg
1.下载:https://ffmpeg.zeranoe.com/builds/ 2.解压缩到,并改名为ffmpeg,放到如:D:\ffmpeg文件夹. 3.添加系统环境变量. 4.打开cmd,输入:f ...
- 如何追踪 WPF 程序中当前获得键盘焦点的元素并显示出来
原文:如何追踪 WPF 程序中当前获得键盘焦点的元素并显示出来 title: "如何追踪 WPF 程序中当前获得键盘焦点的元素并显示出来" publishDate: 2019-06 ...
- 【开发笔记】- 发送邮件(通过JavaMail发送)
前段时间在工作中用到了邮件发送监控的报警信息,今天在这个记录一下JavaMail的邮件工具类. 下边为用到的JavaMail的jar包的pom依赖.这里用的是JavaMail的1.4.6的版本. &l ...
- 基于 k8s-搭建 Kubernetes 的 web 管理界面
查看我们的k8s环境是否正常: 使用kubectl get nodes 获取我们的节点的信息: 到此说明我们的kubernetes环境是正常的,接下来就可以实验了 第一步在master上传所需的软件包 ...
- 继续了解Java的纤程库 – Quasar
前一篇文章Java中的纤程库 – Quasar中我做了简单的介绍,现在进一步介绍这个纤程库. Quasar还没有得到广泛的应用,搜寻整个github也就pinterest/quasar-thrift这 ...
- [LeetCode] 19. 删除链表的倒数第N个节点 ☆☆☆
描述 给定一个链表,删除链表的倒数第 n 个节点,并且返回链表的头结点. 示例: 给定一个链表: 1->2->3->4->5, 和 n = 2. 当删除了倒数第二个节点后,链表 ...
- 1M大概多少个字
<?php echo strlen("你"); 保存文件为gbk 输出2 保存文件为utf-8 输出3 说明不同编码占用字节不同 1M=1024kB 1KB = 1024B ...