分区默认segment大小变化(64k—>8M)

_partition_large_extents和_index_partition_large_extents

参考:

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*分区数目,对比关闭该特性的情况会大非常多

时间: 2024-07-28 15:13:20

分区默认segment大小变化(64k—>8M)的相关文章

delphi 窗口最大化后控件的大小变化怎么设置

设置按钮的Anchors属性.可以通过此属性设置其边界是否随父类一起变化.默认akleft+aktop即左边界和上边界随窗口变化,也就是说如果窗口位置移动了,按钮将保持其left和top边界与窗口的距离. 例如你在窗口右下角放上一个按钮,设置Anchors的属性为[akRight+akBottom],则无论你窗口怎么调整,按钮一直保持在窗口右下角.(即保持右边界与下边界同窗口边界距离不变) 如果[akLeft+akTop+akRight+akBottom]全部加上,那按钮将会随着窗口的大小变化而

div宽度随屏幕大小变化

题目: 一个页面上两个div左右铺满整个浏览器, 要保证左边的div一直为100px,右边的div跟随浏览器大小变化, 比如浏览器为500,右边div为400,浏览器为900,右边div为800. 方案一:使用flex布局 <div class="box"> <div class="left"></div> <div class="right"></div> </div> .

如何让窗体大小随着控件的大小变化而变化

form的autosize=true,formborderstyle=fixedsingle tablelayoutpanel及其里面的容器的dock=fill,autosize=true label中的文字比较贴着窗体边缘时可以通过padding属性来调整 因定宽度则可以使用tablelayoutpanel中的列固定 atablelayoutpanel中的行也可以固定,而不固定行直接按百分比来设置 如何让窗体大小随着控件的大小变化而变化

如何修改 Discuz 门户文章页默认视频大小

在 Discuz 系统中,论坛插入 Flash 等可以输入自定义的尺寸,但是门户文章页不可以修改.经过一番研究,找到了修改门户文章页默认视频大小的方法如下,希望对你有用:找到:/source/function/function_blog.php,在代码内搜索: function blog_flash($swf_url, $type='') { 下面两行代码为: $width = ''; $height = ''; 这里就是默认的视频宽度和高度,你可以随意修改为你想要的尺寸了!完活,收工!

怎样让硬盘分区显示整数大小

怎样让硬盘分区显示整数大小 经常在使用电脑的会发现自己的 C ,D,E, F盘分的都不是整数,细心的感觉不是很好,那么如何在下次装机的时候让你的所有分区都是你想要的整数分区呢,下面我介绍一下我的两种方法. 工具/原料 计算器 ,或硬盘整数分区计算器 方法/步骤1 先为大家详细分析硬盘分区容量显示原理: 不论是机械硬盘还是固态SSD硬盘,厂商为了换算方便,是按照千进制来计算硬盘容量的,例如一块1TB(1000G)的硬盘实际容量是1,000,000,000,000Bit=976,562,500KB=

微信小程序radio组件 - 如何改变默认样式大小?

今天在写小程序的时候用到radio组件,但是很懊恼并未提供修改radio组件大小属性,第一感觉准备用css width , height 改变radio的大小,但是怎么搞也无法改变. 但是又不愿意搞个图片或者字体啥的,感觉麻烦,后来用了下面样式可以改变radio默认样式大小: radio{ transform:scale(.8)  } 原文地址:https://www.cnblogs.com/changxue/p/8432531.html

实现无边框窗体的拖动及窗体大小变化

无边框窗体如何实现用鼠标拖动窗体边缘实现窗体大小变动呢?通过以下几个步骤即可实现: 1.实现WM_NCHITTEST消息,实现四条边框的模拟 2.实现WM_NCLBUTTONDOWN,发送窗体拖曳变化的消息 具体阐述如下: 1. 实现WM_NCHITTEST消息,实现四条边框的模拟,参考代码如下: LRESULT CNoBorderWndChangeSizeDlg::OnNcHitTest(CPoint point) { // TODO: 在此添加消息处理程序代码和/或调用默认值 CRect r

VC++中出现stack overflow错误时修改VC++的默认堆栈大小

VC++中,在栈空间上申请存储的结构体或者类对象的数组空间时,如果数组长度过大,造成申请的栈空间超过或者逼近1MB时,程序可以编译通过,但是不能够执行起来.打到调试模式时会弹出如下图所示的栈空间越界错误对话框. 如下面的类定义: class Character { public: Character() { x0 = 0; y0 = 0; x1 = 0; y1 = 0; offsetX = 0; offsetY = 0; } unsigned int x0:10; unsigned int y0

老人机修改了手机系统默认字体大小的情况处理。

今天发现了rem有一个不适配的情况. 如果有用户把自己手机默认字体改为超大号的话,界面就变形了. 因为之前我们开发一直以320px为最小适配宽度的. 但是改为超大号字体后,rem还认为是320px的宽, 实际上我换算了一下,只有270px宽了,所以有一些浮动的布局会掉下来,或者是看不到, 用苹果手机试了,居然是正常的. 后来,我发现改为超大字体后,网页在uc浏览器.系统自带浏览器和微信浏览器也都是正常的(安卓), 偏偏在我们app里显示不正常, 我得出结论,一定是webview的某个参数没设定.