續上篇,
五. pctfree和pctused
一般而言,pctfree引數用來告訴oracle應該在塊上保留多少空間來完成今後的更新,預設情況,這個值是10%。如果塊中自由空間的值高於這個值,這個塊就是自由的。pctused告訴oracle當前不自由塊(比如這個塊的自由空間只剩下不到10%)的自由空間要達到多大才能再次自由,預設值是40%。
根據你使用的是assm(自動段空間管理)還是mssm(手動段空間管理),這兩引數實際作用會不同。mssm的時候,這些引數控制著塊何時放入freelist,何時從freelist取出。使用預設值,pctfree為10,pctused為40。 在塊達到90%滿之前,這個塊會一直在freelist上。一旦到達90%,就會從freelist中取下來,直到這個塊的自由空間超過塊的60%的時候,才會重新放到freelist中。但使用assm的時候,pctfree仍然控制是否將一新行插入塊中,但不決定乙個塊是否在freelist上,因為assm根本不使用freelist。
pctfree有三種設定:太高,太低和剛好。設定得太高,浪費空間。比如設定成50%,如果你不更新資料,每乙個塊就浪費50%的空間。但是太小,會導致行遷移。
行遷移
行遷移是指由於某一行變化太大,無法再與其餘行一同放在建立這一行的塊中,要求這一行離開原來的塊。當這一行遷移到乙個新位址後,原來快存放它的地方會存放乙個指向新位址的指標。表面上看起來沒什麼問題,但是如果這樣的行遷移太多了的話,會嚴重影響資料的訪問速度,畢竟多了乙個隔離層。
如何設定pctfree和pctused
總體來說,對於mssm,兩引數都重要,但對於assm只有pctfree是重要的。我們要達到的目的是,盡量避免發生行遷移,又要避免浪費太多的空間。
1. 高pctfree,低pctused:當你插入的資料今後會進行大量的更新,而且會頻繁的增加行的大小,適合這種設定。預留大部分空間用於更新,同時保證塊再次回到freelist幾乎為空。
2. 低pctfree,高pctused:如果你只是想對錶完成insert和delete操作,或者確實會update,但update不會增加行大小,這種設定就合適。
六. initrans和maxtrans
段中每乙個塊都有乙個塊首部。塊首部有乙個事務表。事務表會建立一些條目來描敘哪些事務將塊上的哪些行鎖定。這個事務表的初始大小由物件的initrans設定指定。對於表這個值是2,事務表會根據情況動態擴充套件,最大達到maxtrans。在10g中,maxtrans會被忽略,預設是255.
資料庫必知的幾個術語
實體 entity 客觀存在並且可以相互區別的事物稱為實體。實體可以是具體的事物,也可以是抽象的事件。例如,乙個學生 一本圖書等屬於實際事物 教師的授課 借閱圖書 比賽等活動是比較抽象的事件。屬性 attribute 描述實體的特性稱為屬性。乙個實體可以用若干個屬性來描述,如學生實體由學號 姓名 性...
資料庫術語
mysql 資料庫管理系統 不是資料庫 data 資料 db database資料庫 dbs database system資料庫系統 dbms 資料庫管理系統database management system rdms 關聯式資料庫管理系統relational database manageme...
oracle 資料庫幾個技巧
從 站內恢復表 flashback table 表名 to before drop 檢視表空間中各對像占用空間情況 select tablespace name 表空間,segment name 表名稱,bytes 1024 1024 mb 表大小from user segments a where...