1.Oracle数据块与操作系统数据块
Oracle数据块和操作系统数据块不同,它通常是操作系统数据块大小的若干倍(最高为5倍)。假如操作系统每次读写磁盘的数据块是512K,而Oracle的数据块大小为其2倍,那么数据库中参数:DB_BLOCK_SIZE = 512 * 2。也就是说Oracle每次读写磁盘的I/O大小是1M。将每次读入1M数据或写入1M数据。
2.Oracle数据块格式
Oracle的数据块中包含了以下信息:
1.基本信息:块的地址和数据类型
2.表信息:存储的数据是那个表的
3.行信息:存储的是哪些数据(可多条)
4.数据区:持久化的信息
5.空白区:为用于数据存储的空白区域
3.Oracle何时对数据块碎片进行整理
由于删除或更新而被释放出来的空间可能是不连续的。Oracle会在以下两种情形下对这些不连续的空间进行归并:
①当一个Insert,update语句试图使用一个剩余空间不足的数据块时。
②剩余空间被分散成多个碎片而无法连续利用
其它情况下Oracle不会对数据块的碎片进行整理。因为这种对碎片的整理,归并工作比起数据写入更新可能更加耗时。
4.PCTFREE、PCTUSED参数
PCTFREE和PCTUSED参数允许用户对Oracle数据块的空白区(Free space)进行管理。
①PCTFREE:保留的可用空白空间大小
②PCTUSED:可用的最大数据空间
PCTFREE: 只要剩余空白空间降低到PCTFREE指定的水平,将不允许新记录插入,而仅允许本记录更新
PCTUSED:只要已使用空间达到PCTUSED指定的水平,将不允许新记录插入,而仅允许本记录更新
这两个参数其实是两种不同的控制可用空间说法
5.插入操作与PCTFREE参数
PCTFREE仅对Insert操作有用,但对Update无效。也就是说当空用空间降低到PCTFREE指定的水平时,将不再允许Insert操作,但Update操作可以照常使用剩余空间。
Oracle为每个段维护一或多个空用链表,这些链表上的对象是每一个未分配的数据块,已经分配出去但剩余空间被PCTFREE大的数据块。这些数据块都是可以被用于插入新记录的。
假如一个数据块的剩余空间比PCTFREE指定的要小,但又达到PCTUSED的水平。那么Oracle将把该数据块从可用链表上摘下来,因为该数据块肯定是不能用于再插入新记录的了(这个时候就需要进行前面我们提到的数据块碎片整理了)。
6.删除、更新操作与PCTUSED参数
如果执行了一个Delete或Update语句后,Oracle会检查当前该数据块的可用空间。判断其是否比PCTUSED指定的值小,如果是的话将其挂到可用链表上作为第一个可分配空间。
7.PCTFREE与PCTUSED参数配合使用
①插入操作前检查数据块的PCTFREE值
②删除或更新操作后检查数据块的PCTUSED值
如果PCTFREE值大于指定的水平,或PCTUSED值小于指定的水平则作为可分配空间挂到Free list链表上。
-------------------------------------------------------------
生活就像打牌,不是要抓一手好牌,而是要尽力打好一手烂牌。
posted on 2008-12-21 14:58
Paul Lin 阅读(650)
评论(0) 编辑 收藏 所属分类:
Oracle Concept