1 块级别管理空闲空间
空间管理涉及到在块级管理空闲空间。通过自动的段空间管理,每个块被划分为四个部分,分别命名为FS1(0 - 25%空闲空间)、FS2(25% - 50%空闲空间)、FS3(50% - 75%空闲空间)和FS4(75% - 100%空闲空间)。
根据块中的空闲空间级别,它的状态将自动更新。这样,根据插入行的长度,可以判断是否可以使用特定的块来满足插入操作。注意,“full”状态意味着块不再用于插入。

左边的块是一个FS3块,因为它有50%到75%的空闲空间。在一些插入和更新语句之后,到达PCTFREE(虚线),不再在该块中插入新行。该块现在被认为是一个“full”或FS1块。只要块的空闲空间级别低于下一部分,就会再次考虑插入该块。在以上的例子中,只要空闲空间超过25%,它就会获得状态FS2。
注意:大对象(LOB)数据类型(BLOB、CLOB、NCLOB和BFILE)不使用PCTFREE存储参数。未压缩和oltp压缩块的默认PCTFREE值为10;基本压缩块的默认PCTFREE值为0。
2 行链接和行迁移概念
在两种情况下,表中一行的数据可能太大而无法放入单个数据块中。在第一种情况下,当第一次插入该行时,该行太大,无法放入一个数据块中。在这种情况下,Oracle数据库服务器将该行的数据存储在一个或多个数据块中。行链接最常发生在large row,比如包含LONG或LONG RAW数据类型的列的行。在这些情况下,行链接是不可避免的。
但是,在第二种情况下,一个数据块的行被更新,因此整个行长度增加,而块的空闲空间已经被完全填满。在这种情况下,Oracle数据库服务器将整个行的数据迁移到一个新的数据块,假设整个行可以放入一个新块中。数据库保留已迁移行的原始行块,以指向包含已迁移行的新块。迁移行的ROWID不变。以上为行迁移现象。
当一个行被链接或迁移时,与该行相关的输入/输出(I/O)性能会降低,因为Oracle数据库服务器必须扫描多个数据块来检索该行的信息。
3 合并块中的空闲空间情况
Oracle数据库服务自动透明的合并块中的空闲空间情况:
插入或更新语句尝试来使用块中的空闲空间时
空闲空间是零碎的,这样行片段不能插入到连续的块空间中
4 练习题
判断题
当一个行发生了行连接或行迁移,I/O性能会下降,因为必须要扫描更多的块来浏览行数据。
A True
B False




