[网络课摘抄]5.1 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表数据块的利用率较高,所以存储相同数据的时候它的数据块使用最少。

时间: 2024-10-18 13:28:07

[网络课摘抄]5.1 PCTUSED和PCTFREE对数据操作的影响的相关文章

[网络课摘抄]1.DBA日常工作内容和职责

1.统计数据库总容量 按表空间分别统计: 总容量(单位为M): 2.计算用户下所有对象大小 3计算USERS表空间的大小 4计算该USERS表空间对象大小 -----------------------------------------------以下摘抄于网络----------------------------------------------- DBA 职责及日常工作职责: 1.安装和升级数据库服务器,以及应用程序工具构建和配置网络环境. 2.熟悉数据库系统的存储结构预测未来的存储需

[网络课摘抄]8.1模拟控制文件丢失后的数据库恢复(完全恢复)

1.环境准备 1.1确认数据库版本 1.2确认数据库归档 1.3备份数据库文件 2模拟控制文件丢失后的数据库恢复(完全恢复). 2.1查看控制文件位置 2.2执行操作后删除控制文件 2.3启动数据库 启动数据库的时候发现数据库发生了报错,提示无法确认控制文件,检查告警文件,我们现在检查一下告警文件里的信息: 2.4重建控制文件 对于日志和数据文件都完整的情况下,如果只是控制文件丢失,那么重建控制文件是最好的一种解决方式,一般重建控制文件能够解决99%的问题,现在我们就重建控制文件. 2.5尝试打

[网络课摘抄]9.1使用RMAN备份数据库

1.1使用控制文件备份全库 1.1.1配置备份路径 1.1.2 RMAN备份全库 1.2使用catalog数据库备份全库 1.2.1配置到远程数据库的TNS 1.2.2创建表空间及设置用户 1.2.3进入目录数据库并注册 1.2.4 CATALOG方式备份全库

[网络课摘抄]6.2示例演示数据压缩的效果

1概念理解 当系统的存储空间不足时或我们为了节省存储空间,一般都会想到数据压缩技术,在ORACLE系统中使用数据压缩技术不仅能够节省我们的存储空间,而且还会减少我们的内存占用.提高我们的I/O及查询速度.数据压缩技术常使用在OLAP系统中,我们知道通常OLAP系统一般数据量比较大,一次加载的数据量比较多,且多不存在DML操作,所以数据压缩比较适合OLAP系统,但需要注意的是数据压缩技术会消耗更多的时间和资料,特别是CUP资源. 压缩表实现可以从创建表时实现,也可以把一个已存在的表变为压缩表,下面

[网络课摘抄]6.1Oracle临时表

1概念理解 ORACLE系统的临时表常被用于存放系统操作的中间数据,由于对临时的任何操作都不产生redo(但会因为修改undo而产生redo),所以临时表的数据操作效率一般都比较高.常用的临时表主要有两类,一类是基于事务的临时表,一类是基于会话的临时表,基于事务的临时表是只有当事务被提交或回滚时,临时表的数据才会被清空:基于会话的临时表是只有当会话结束时,临时表的数据才会被清空,两种类型的临时表数据都是对当前会话可见. 2基于事务的临时表 创建一张基于事务的临时表: 在这里我们创建了一张基于事务

[网络课摘抄]3.利用logminer恢复delete误删除操作的数据

1环境准备 日志挖掘可以基于日志.基于时间.基于SCN分析,这里我们将演示一个基于SCN的分析案例. 开启补充日志功能(必须开始,否则不能捕获DML操作日志): 创建一张livan表,往里面插入了14条数据,如图: 2查看当前日志 3确认SCN删除测试表数据 查看当前SCN: 执行delete操作,删除了14条数据: 查看此时的SCN: 4 logminer加载日志文件并分析 加载日志文件: 开始日志挖掘: 5查询v$logmnr_contents视图 6结束日志挖掘 exec dbms_log

[网络课摘抄]7 ASM文件系统

1.确认数据库版本 2.个人理解的存储解决方案的发展趋势 2.1图示说明 2.2图示描述 如上图我们描述了在不同时期的IT行业(数据库)出现的存储文件系统,下面我们将分别说明: ü  裸设备:所谓裸设备是指那些没有安装文件系统的一些存储设备,像比较老一点的IDE磁盘,到现在常用到的SCSI磁盘等,只要没有安装文件系统就属于裸设备:我们在使用裸设备的时候或者说数据库在使用裸设备的时候,必须为每一个文件单独创建一个裸设备,这种情况下对于数据的复制和备份很不方便,所以这种存储方案大多不被人们所接受.

[网络课摘抄]5.2演示数据块整理(合并)的效果

1概念理解 由于对表空间进行频繁的DML操作,在空间的分配上势必会产生一些空间碎片影响系统效率.对磁盘碎片整理上可以使用的方法有重建表.move.shrink等.另一种情况是DELETE操作并不会回收HWM高水位线,ORACLE扫描表时依然是从第1个数据块扫描到HWM,当有新记录插入时,也是从HWM后开始插入,之前标记为删除的记录所占用的空间并没有释放,这不光影响了我们数据扫描的性能而且验证浪费了空间使用,下面我们就分别利用move\shrink两中技术来整理合并数据块. 2环境准备 创建一张表

[网络课摘抄]8.4 rman恢复误删除的一张表(不完全恢复)

恢复误删除的一张表可以使用很多方法,如日志挖掘.闪回等,rman恢复(不完全恢复)肯定不是最好的,也不建议用, 现在我们只是演示一下这种恢复. 1 RMAN备份数据库 2创建测试表 3查看此时的SCN并删除表 4恢复数据测试表 5验证测试表是否恢复过来