PCTUSED和PCTFREE对数据操作的影响
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对数据操作的影响的更多相关文章
- SQL不同服务器数据库之间的数据操作整理(完整版)
---------------------------------------------------------------------------------- -- Author : htl25 ...
- C#利用SqlDataAdapte对DataTable进行批量数据操作
C#利用SqlDataAdapte对DataTable进行批量数据操作,可以让我们大大简化操作数据的代码量,我们几乎不需要循环和不关心用户到底是新增还是修改,更不用编写新增和修改以及删除的SQL语句, ...
- JavaScript数据操作--原始值和引用值的操作本质
我的一句话总结:原始值不管是变量赋值还是函数传递都不会改变原值,引用值不管是变量赋值还是函数传递,如果新变量重新赋值,则不会影响原引用值,如新变量是直接操作,就会影响原引用值. 首先明确,值和类型是两 ...
- [SQL]SQL语言入门级教材_SQL数据操作基础(二)
SQL数据操作基础(初级) netnova 于 -- :: 加贴在 数据库探讨: 为了建立交互站点,你需要使用数据库来存储来自访问者的信息.例如,你要建立一个职业介绍服务的站点,你就需要存储诸如个人简 ...
- SQLServer服务器数据库之间的数据操作(完整版)
分类: 数据库开发技术 ---------------------------------------------------------------------------------- -- Au ...
- 转载-SQL不同服务器数据库之间的数据操作整理(完整版) .
---------------------------------------------------------------------------------- -- Author : htl25 ...
- veridata实验举例(6)验证agent启动先后顺序是否对捕获update操作有影响
veridata实验举例(6)验证agent启动先后顺序是否对捕获update操作有影响 续接veridata实验系列 上篇:"veridata实验举例(5)改动主键上的列值.update ...
- SQL语言-----数据操作
数据操作 增加数据,insert into 标准格式 insert into 表名 (字段的列表)value(数据列表): 使用set insert into 表名 set 字段1=值,2.....: ...
- Oracle篇 之 数据操作
一.DML 数据操作语言(Data Manipulation Language) 1.insert insert into student values(1,'briup1',20,'Male'); ...
随机推荐
- SQLServer批量创建有规则的数据
根据需求要生成从kkk001,kkk002开始的100个递增账号 手插要死人的,用SQL脚本轻松完成: declare @a int ) ) begin ) ) end declare:申明变量, @ ...
- 【Tomcat】直接启动tomcat时为tomcat指定JDK 而不是读取环境变量中的配置
在windows环境下以批处理文件方式启动tomcat,只要运行<CATALINA_HOME>/bin/startup.bat这个文件,就可以启动Tomcat.在启动时,startup.b ...
- UVA 12232 Exclusive-OR(并查集+思想)
题意:给你n个数,接着三种操作: I p v :告诉你 Xp = v I p q v :告诉你 Xp ^ Xq = v Q k p1 p2 … pk:问你k个数连续异或的结果 注意前两类操作可能会出现 ...
- JMeter常用字符串相关函数
JMeter的惯用函数使用-字符串相关 主要的函数如下:1.将字符串转为大写或小写: ${__lowercase(Hello,)} ${__uppercase(Hello,)}2.生成字符串: _ ...
- python装饰器--@property
@property 考察 Student 类: class Student(object): def __init__(self, name, score): self.name = name sel ...
- C# 插件式程序开发
在网上找了下插件式编程的资料,这里自己先借鉴下别人的,同时发现有自己的看法,不过由于本人水平有限,不一定有参考价值,写出来一方面是为了总结自己,以求提高,另一方面也希望各为朋友看到我的不足,给我提出宝 ...
- SpringJMS解析1-使用示例
Spring配置文件: <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="h ...
- Ext中Grid重新load设置URL
一.前言 Extjs中grid网格有时候需要重新加载,加载的时候对应不同的URL,什么情况出现:有需要我们在添加附件的时候,添加完成了附件,需要把另一个show添加的数据重新加载到grid中,而 ...
- CentOS6.4安装mysql2redis
1.安装apr 下载:http://apache.dataguru.cn//apr/apr-1.5.1.tar.gz tar zxvf apr-.tar.gz cd apr- vi configure ...
- topcoder SRM 624 DIV2 BuildingHeightsEasy
从大到小遍历一遍,每次取M个元素,然后求得最小的floor即可 int minimum(int M, vector <int> heights) { sort(heights.begin( ...