posts - 262,  comments - 221,  trackbacks - 0
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

只有注册用户登录后才能发表评论。


网站导航:
 
<2008年12月>
30123456
78910111213
14151617181920
21222324252627
28293031123
45678910

常用链接

留言簿(21)

随笔分类

随笔档案

BlogJava热点博客

好友博客

搜索

  •  

最新评论

阅读排行榜

评论排行榜