您的位置:首页 > 数据库 > Oracle

[转]oracle学习笔记一:pctfree、pctused and freelist

2011-07-05 13:20 423 查看
转自 http://www.dbasky.com/sinablog/1234/
这两天在看一些Oracle概念性的东西,今天看到了block,就把关于它的两个重要概念pctfree
和pctued以及freelist研究了一下,终于懂了。
pctfree这个参数定义了一个块保留空间的百分比,保留空间是为了将来可能发生的更新操作,因为更新可能增大被更新行占用的空间,如果此时该块没有可利用空间,那么只有发生row
migrate了,从而会降低I/O性能。换句话说,就是当一个块的利用率达到1-pctfree的时候,oracle就将该块从freelist中移除,不再向该块插入数据。所以说pctfree是控制什么时候将块从freelist中移除的。
pctused这个参数控制一个块什么时候被重新启用来插入数据,例如当一个块达到1-pctfree利用率的时候,oracle停止向该块插入数据,同时从freelist移除该块,但是后来发生一些删除操作,使得该块的利用率下降,当该块的利用率降到pctused以下的时候该块就被重新启用来插入数据了,也即是将该块重新加入到freelist列表中,所以说pctused是控制什么时候将一个块重新加入freelist的。
举个例子:比如一个块的pctfree定为10%,pctused定为40%(oracle默认设置)。那么一个块的使用率达到90%(即1-10%)的时候,oracle将该块从freelist中移除,停止使用该块来插入数据(但可更新)。后来该块上发生了一些删除操作,使得该块的利用率下降,当使用率下降到40%以下的时候,oracle重新将该块加入freelist,可用于新的插入。
下面是一个比较形象的比喻,大家可以参考:
要形容一個 BLOCK 的咦鳎覀兛梢园岩粋 BLOCK
想成一個水杯。侍者把水倒入放在我們面前的水杯,要多滿呢,我們要求他倒
9 分滿好了,這時候 PCTFREE 代表著設定為 10 ,意思就是說,當 BLOCK
使用到達 90% 的時候,就不可以在使用了,這個 BLOCK 應該從 FREELIST
列表中移除 (un-link) 。為何要保留 10% 的空間呢?這是為了提供 update
資料時所可能增加的空間使用,如果空間保留的太小,就容易發生 row
chaining 。

PCTUSED 代表著這杯水什麼時候可以添加,假設 PCTUSED 為 40
,代表當我們把水杯的水喝到剩下 40%
以下時,侍者就會知道需要加水了。你想想看,如果說在餐廳裡妳每喝一口水侍者就來加水,你會不會覺得很煩,對餐廳來說,也要派很多人不斷幫每桌客人加水,這生意還能做嗎?所以說,
PCTUSED 代表著 re-link 回 FREELIST 的意義,如果說 PCTUSED
設的太大,例如 70
好了,代表這杯水你隨便喝一口侍者就要來加水了,這隱含的意義是,這個杯子的利用率增加,但是侍者頻繁的服務造成了負荷
(I/O Overhead) 。 PCTUSED 設小一點,例如 10 ,代表當水喝到剩下 10%
的時候 ( 如同 DELETE 事務操作 ) ,才須要放回 FREELIST
,代表可以加水了 ( 如同 INSERT 事務操作 ) 。

簡單的說,如果希望儲存空間發揮最大使用效益,可以把PCTUSED設大一點,相反的,如果想要提高IO效能,應該把PCTUSED設定小一點。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: