Chinaunix首页 | 论坛 | 博客
  • 博客访问: 52443
  • 博文数量: 25
  • 博客积分: 2015
  • 博客等级: 大尉
  • 技术积分: 215
  • 用 户 组: 普通用户
  • 注册时间: 2007-12-16 17:34
文章分类
文章存档

2008年(25)

我的朋友

分类: Oracle

2008-03-07 11:59:32

Oracle中有空闲列表的概念.空闲列表中存储的是可供插入新行的块信息
所以新的行数据只会插入到那些存在于空闲列表中的块.
空闲列表的管理机制与建表时pctfree和pctused参数两个参数有紧密关系.
当一个块第一次开辟的时候,当然是在空闲列表中的.
随着不断地插入行数据,当使用率达到或者超过 1-PCTFREE%的时候,该块从空闲列表中移出.
所以这时候新的行数据不可能再存放到该块中. 那这个剩余的PCTFREE%部分岂不是浪费了,当然不是了.
随着UPDATE 活动的增多,某些存在该块中的行数据的就会变大,变大部分的数据就存放在PCTFREE部分中.

Delete活动,会将行数据从块中抹去,这时候块的使用率可能会低于1-pctfree%, 但是该块还是不会
立即回到空闲列表,也就是该块这时候不会接受新的行数据.  那什么时候该块会重新回到空闲列表中呢?
直到该块的使用率低于PCTUSED%的时候,才会回到空闲列表中,也就是说这时候可以接受新的行数据了.

所以当你的系统有较多的update活动并且行数据的大小变化较大的时候,应该预留较多的pctfree.
例如一个公文审批系统,一个公文在流转的过程中,数据在不断地变大。
对于一个没有update活动的表,可以将其设置为0.如系统中的组织架构表,更新的可能性几乎为0。

如果你想充分地利用块,则将PCTUsed 设置地高一点,以便在发生Delete活动后,快速地回到空闲列表中.

sql>create table e3 tablespace system pctfree 20 pctused 30

storage(freelists 2)

as select * from emp where 0=9;

为什么要建立到system表空间,因为system表空间是手工管理的,有空闲列表。

sql> select table_name,pct_free,pct_used,freelists from user_tables

TABLE_NAME                       PCT_FREE   PCT_USED  FREELISTS
------------------------------ ---------- ---------- ----------
DEPT                                   10
EMP                                    10
BONUS                                  10
SALGRADE                               10
T2                                     10
T1                                     10
TEST                                   10
E3                                     20         30          2

为什么只有E3的显示和其他表不一样,因为他们的表空间不一样,E3在system表空间,其他表在users表空间,10.2以后的版本默认的表空间都为自动管理空闲块,自动管理空闲块是通过位图块来管理的,本质的不同,没有空闲列表。

 

阅读(961) | 评论(0) | 转发(0) |
0

上一篇:oracle数据库日常维护

下一篇:随笔

给主人留下些什么吧!~~