PCTFREE, PCTUSED, INITRANS, MAXTRANX, FREELIST PARAMETERS

来源:互联网 发布:matlab画数组 编辑:程序博客网 时间:2024/06/11 19:49

PCTFREE, PCTUSED, INITRANS, MAXTRANX, FREELIST PARAMETERS
http://www.odba.idv.tw/freelist.htm

要形容一個 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設定小一點。

FREELIST 儲存著可使用的 BLOCK 資訊,當 BLOCK 被 DELETE 資料使用量下降到 PCTUSED 時,就會重新放置到 FREELIST 上,讓其他交易新增資料使用。 FREELIST 存放在 TABLE/INDEX 的 Segment Header 中,他管理著所有可以新增資料的 BLOCK 資訊。想想,如果有多人同時要新增資料而要求 FREELIST 提供可使用的 BLOCK 資訊, FREELIST 不就也會成為另一個 Overhead ?所以依照 TABLE 使用的需求調整 FREELIST 的數量也是 IO Tuning 的一個重點。

INITRANS 指的是一個 BLOCK 上初始預分配給並行交易控制的空間 (ITLs)

( 當 BLOCK 上某筆 ROW 被交易更新鎖定時,會在 BLOCK header ITL allocate 一個鎖,當下一個交易要更新同一筆 row 時,就會發現他已經被先前的交易持有鎖了,會先去檢查該交易是否 active? 如果是,後來的該筆交易就會被 blocking ,等待 ) 如果一個表格需要同時有大量交易存取,你應該設定 INITRANS 大一點,可以減少 ITL 還要動態擴充的 Overhead 。

For tables INITRANS defaults to 1 for indexes 2

MAXTRANS 指的是如果 INITRANS 空間不夠用了,就會自動擴展 ITL ,直到最大值也就是 MAXTRANS 值為止,預設是 255 。但是,如果 BLOCK 空間已經不足,也有可能無法持續擴充到 255 個 ITS 空間喔。 

原创粉丝点击