1概念理解

首先PCTUSED和PCTFREE都是针对数据块的存储属性,单位都是%。其中PCTFREE决定了数据块什么时候从free list中移除,系统就不可以再往该数据块中插入数据,对于数据块中已有数据的更新可以使用数据块的保留空间(当update数据块时,剩余空间不足于满足update后的空间要求时,将会发生行迁移)。

PCTUSED决定了数据块什么时候被重新放置于free list中去,系统又可以往该块总插入数据(当insert数据到数据块时,剩余空间不满足insert 时的空间要求且重开一个新数据块也不满足时,就发生数据块行链接)。需要注意的是PCTFREE和PCTUSED是两个相互独立的属性,在手动管理的表空间中两个属性都有效,在自动管理的表空间中,PCTUSED已经被废弃,只保留了PCTFREE属性。

举个例子:

假设当前此两属性分别设置为PCTFREE=10,PCTUSED=40,则表示:

ü  当数据块的剩余空间小于10%时,数据块将不再置于free list中,相应的数据块也不会再有新数据插入。

ü  当数据块的已使用空间小于40%时,数据块将重新置于free list中,相应的数据块又可以进行数据的插入。

2环境准备

由于PCTFREE和PCTUSED是两个相互独立的属性,下面我们将分别演示这两个属性的对数据块的影响。

3演示PCTFREE对数据块影响

查看当前TEST表PCTFREE/PCTUSED设置:

从上图中可以看到TEST属于TEST表空间,PCTFREE值为10%,PCTUSED为空说明当前TEST表空间是采用段自动管理的 (ASSM)。

验证表空间的管理方式:

现在我们修改TEST表的PCTFREE和PCTUSED属性(其实修改PCTUSED属性在ASSM管理方式也不会起到效果):

创建一个用于测试的ASSM表空间:

验证新创建的表空间的管理方式:

修改属性后移动TEST表到TEST2表空间:

对表再做一次分析:

查看目前的表属性及数据块的大小:

从上图中可以明显看到目前TEST表属于TEST2的表空间,PCT_FREE参数变成了50,PCT_USED参数为空没有发生改变,数据块占用了增加到了1894个,

TEST表占用的数据块由1050增加到了1894个,这是因为我们更改PCTFREE参数,原来PCTFREE为10%时有90%的空间可以插入数据,而改为50%时只有50%的空间可以插入数据,在数据量没有发生改变的情况下,单个数据块可使用的空间减少了,相应的就需要更多的数据块来存储数据。

4演示PCTUSED对数据块影响

创建一个手工段管理(MSSM)管理的表空间:

验证新创建的表空间:

从上面的图中可以看见新创建的表空间TEST_MSSM的段空间的管理类型是manual。

在手动管理的表空间上创建一张表:

查询TEST1表上PCTFREE\PCTUSED属性设置:

从上图中可以看到默认TEST1表PCT_REE为10,PCT_USED为40,可以发现我们这次PCT_USED有了数值,这是因为TEST1所在的表空间为手动管理的表空间,目前的数据块为1023个。

更改PCTFREE和PCTUSED参数:

再次收集统计信息及查看表属性情况:

从上面的图中可以发现PCT_FREE和PCT_USED参数已经发生了改变,这说明之前我们能的修改已经生效,而数据锁占用的数据块没有发生改变,这说明PCT_USED的变化并不会影响第一次加载的数据。

现在我们要比较PCT_USED参数发生改变时对数据块的影响:

在TEST_MSSM表空间下创建两张一样的测试表:

对表TEST2和TEST3进行分析:

查看TEST2和TEST3表属性信息:

从上面的图中可以看出两张测试表属性信息相同。

修改TEST2和TEST3表的PCTUSED属性,其他比变:

现在再确认一下TEST2和TEST3表属性:

从上图中可以看到我们的更改已经生效,数据块没有发生改变,这是正常的(PCTUSED属性不会影响表第一次插入时分配的block数量)。

分别在TEST1和TEST2表执行删除操作,删除相同部分数据:

分别在TEST1和TEST2表插入相同部分的数据:

执行表分析:

查看两张表属性:

此时发现两张表由于PCT_USED不同,在插入相同数据时,表所占用的数据块数据发生了变化,这是因为再删除了一批数据后,ORACLE会根据所操作数据块的PCTUSED属性来判断数据块是否可以在此被使用,当TEST2表删除后PCTUSED降到30%后才可以往表TEST2中继续插入数据,当TEST3表删除后PCTUSED降到60%后才可以往表TEST3中继续插入数据,由此可见TEST3表数据块的利用率较高,所以存储相同数据的时候它的数据块使用最少。

PCTUSED和PCTFREE对数据操作的影响的更多相关文章

  1. SQL不同服务器数据库之间的数据操作整理(完整版)

    ---------------------------------------------------------------------------------- -- Author : htl25 ...

  2. C#利用SqlDataAdapte对DataTable进行批量数据操作

    C#利用SqlDataAdapte对DataTable进行批量数据操作,可以让我们大大简化操作数据的代码量,我们几乎不需要循环和不关心用户到底是新增还是修改,更不用编写新增和修改以及删除的SQL语句, ...

  3. JavaScript数据操作--原始值和引用值的操作本质

    我的一句话总结:原始值不管是变量赋值还是函数传递都不会改变原值,引用值不管是变量赋值还是函数传递,如果新变量重新赋值,则不会影响原引用值,如新变量是直接操作,就会影响原引用值. 首先明确,值和类型是两 ...

  4. [SQL]SQL语言入门级教材_SQL数据操作基础(二)

    SQL数据操作基础(初级) netnova 于 -- :: 加贴在 数据库探讨: 为了建立交互站点,你需要使用数据库来存储来自访问者的信息.例如,你要建立一个职业介绍服务的站点,你就需要存储诸如个人简 ...

  5. SQLServer服务器数据库之间的数据操作(完整版)

    分类: 数据库开发技术 ---------------------------------------------------------------------------------- -- Au ...

  6. 转载-SQL不同服务器数据库之间的数据操作整理(完整版) .

    ---------------------------------------------------------------------------------- -- Author : htl25 ...

  7. veridata实验举例(6)验证agent启动先后顺序是否对捕获update操作有影响

    veridata实验举例(6)验证agent启动先后顺序是否对捕获update操作有影响 续接veridata实验系列  上篇:"veridata实验举例(5)改动主键上的列值.update ...

  8. SQL语言-----数据操作

    数据操作 增加数据,insert into 标准格式 insert into 表名 (字段的列表)value(数据列表): 使用set insert into 表名 set 字段1=值,2.....: ...

  9. Oracle篇 之 数据操作

    一.DML 数据操作语言(Data Manipulation Language) 1.insert insert into student values(1,'briup1',20,'Male'); ...

随机推荐

  1. 【jQuery 区别】attr()和prop()的区别

    1>>> 今天实现一个 点击更新按钮 ,可以勾选上本行的的checkbox的功能: 使用代码: /** * updateproduct.htmls 更新 产品信息 */ $(docu ...

  2. 关于解决haswell赛扬和奔腾 不能安装的问题

    打开EFI\CLOVER\config.plist,并找到KernelAndKextPatches字段,在子集内插入下面代码. <key>FakeCPUID</key> < ...

  3. JMeter中的关联-正则表达式提取(1)

    运用Jmeter正则提取器,可以从请求的响应结果中取到需要的内容,从而实现关联. jmeter之关联 的个人理解: 关联是请求与请求之间存在数据依赖关系,需要从上一个请求获取下一个请求需要回传回去的数 ...

  4. CentOS VMware 配置IP小结 静态 配置 桥接 NAT

    系统启动后可先ping下外网或局域网内其它机器. 如果配置虚拟机时选择的NAT上网方式,后面需要配置固定IP,请先参见VMware NAT方式下设置静态IP获得可用的IP范围和网关等信息. 先将ifc ...

  5. Android集成支付宝的坑

    Android在集成支付宝sdk的时候, 如果有安装支付宝,则启动支付宝app进行支付: 如果没有安装,则启动 H5PayActivity 进行支付. 记得在AndroidManifest里面配置: ...

  6. iOS10 UI教程禁用视图与用户的交互

    iOS10 UI教程禁用视图与用户的交互 在上文中我们提到了使用isHidden属性和alpha属性可以使视图与用户的交互被禁用,除此之外此功能还可以使用UIView的isUserInteractio ...

  7. iOS开发-由浅至深学习block

    关于block 在iOS 4.0之后,block横空出世,它本身封装了一段代码并将这段代码当做变量,通过block()的方式进行回调.这不免让我们想到在C函数中,我们可以定义一个指向函数的指针并且调用 ...

  8. ios开发-载入viewcontroller的几种方式

    Assuming you have storyboard, go to storyboard and give your VC an identifier (inspector), then do: ...

  9. http://blog.csdn.net/u010246789/article/details/52539576

    http://blog.csdn.net/u010246789/article/details/52539576

  10. header元素

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...