Oracle8i 與Oracle9i 中對pctused 和pctfree, pctincrease 的理解
以下是對pctused 和pctfree 的一些理解和問題 ,不對之處望指正 。
1. pctused 和pctfree 是資料庫表的引數 ,pctused 設定表每個資料庫塊的最低使用空間比率 (預設為40, 即40%) , pctfree 設定表中每個資料庫塊所要保留的剩餘空間的比例,用於日後資料更新之用,預設的值為10,即10% 。
2. pctused 和pctfree 的理解: 當一個表中的資料塊從開始用到使用30%,這時候沒有達到最低空間使用比率,這個資料塊在資料插入時,仍然是可以儲存資料的一塊空間,也就是說還可以插入 ( 當然這個時候其他還沒有被使用的資料塊也可以用於插入這筆資料,不知道Oracle是按照什麼原理來區分將這筆資料插入那塊已經使用30%的資料塊還是插入還沒有被使用的那個資料塊 ? ) 。
3. 當這個資料塊利用到40% 的時候,仍然可以插入資料,假設現在插入資料到了80% 塊空間大小,這時也可以插入資料,因為還沒有達到90% 限制點,但是如果現在我們從80%的資料中刪除掉一些資料(比較小量), 利用率變為50% , 由於我們刪除的資料行可能是相互離散的,那麼oracle不能釋放這部分 ( 80% - 50% = 30% ) 空間,那麼現在的空間利用為50%,30% 不能再利用,那麼再使用10% 就達到了90%限制點 。 一個數塊中就可能有30% 的空間被浪費,如果日後永遠不會更新, 那麼浪費的空間就是30%+10% = 40% 的資料塊空間 。
------- 當沒有達到pctfree的值時,如果刪除了資料,這些空間仍然可以繼續使用。只有達到或者超過pctfree的值,pctused才會起作用,這時delete操作釋放的空間不會再被insert使用。 也就是說要低過pctused以後,block才會重新被列入到freelist,才會用來insert新的行; 9i中segment mangement 為auto時,pctused已經不起作用了。
4. pctfree 設定問題: 對於經常更新的表,需要設定較大的pctfree, 防止出現連結行,也就是跨塊儲存的行,10是預設值,據我們的實際觀察,對於經常更新的表,10 基本上是不夠的 ( 當然這要看儲存的行中各列大小是否會變 ), 如果不同時間插入或更新的列大小變化比較大,比如一行資料 其中一列名為 “備註“, 經常被更新,有時候從空update 到 500 bytes甚至更大,這樣就比較容易發生chained row 。 但是設定的太大感覺浪費比較大,比如pctfree=30% ,那麼這30% 就鐵定不能被使用( 如果日後不對它update的話 ),不知道如何找到平衡點 ?
-------根據應用的不同,區分經常更新的表和資料比較穩定的表。根據表更新的程度和表中的欄位型別(如非空的char型別的更新不會發生變化)對於不好估計的表,你可以根據表的資料量的大小去評估——儲存空間的佔有和效率那個更加重要一些。
5. pctincrease 僅僅是針對tablespace 而言的,具體的理解http://www.itpub.net/showthread.php...15&pagenumber=1 討論的比較清楚 。
----- pctincrease不只是針對表空間的,一樣可以對錶進行設定。不過一般來說,對錶設定為0。目前我還沒有發現對錶設定為非0值有任何好處。
6. Oracle9i 中用local manager好像不再需要 pctincrease 這個引數了,但是還是可以設定 。
Oracle9i 文件中看到的:
The storage parameters NEXT, PCTINCREASE, MINEXTENTS, MAXEXTENTS, and DEFAULT STORAGE are not valid for extents that are managed locally 。 預設值的應該和oracle8i 中一樣 。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/35489/viewspace-84676/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- pctused, pctfree, pctincrease , 行遷移 & 行連結
- oracle pctfree與pctusedOracle
- Oracle pctfree 和 pctusedOracle
- pctfree和pctused的區別。
- Oracle中關於PCTFREE和PCTUSED的說明Oracle
- oracle pctfree和pctused詳解Oracle
- Oracle資料庫的PCTFREE與PCTUSEDOracle資料庫
- Oracle 空閒列表管理機制與pctfree和pctused引數Oracle
- How PCTFREE and PCTUSED Work Together(十)
- PCTFREE, PCTUSED, and Row Chaining(七)AI
- 建立表時引數PCTFREE和PCTUSED詳解
- block學習(pctfree&pctused),行遷移問題(zt)BloC
- Oracle8i OPS與Oracle9i,10g RAC的區別Oracle
- Oracle8i中SORT_AREA_SIZE和SORT_AREA_RETAINED_SIZE的理解OracleAI
- 對與locale和resourceBundle的理解
- 對javascript中的call()和apply()的理解JavaScriptAPP
- Qt中對js和HTML通訊的理解QTJSHTML
- java學習中對類和物件的理解Java物件
- 理解Oracle9i中的監聽動態註冊Oracle
- 對HTML中"#"的理解HTML
- 理解Oracle9i中的監聽動態註冊(zt)Oracle
- 對Innodb中MVCC的理解MVC
- 程式中,對鎖的理解
- 對session和cookie的理解SessionCookie
- 熱點塊問題中pctfree的設定
- 談談對中斷的理解
- javascript 中{}和[] 的理解JavaScript
- Block中的ITL槽能擴充套件到多少與pctfree有關係麼 ?BloC套件
- 對AIDL和Binder的理解AI
- Oracle9i中的PGAOracle
- golang當中對select的理解Golang
- 對JavaScript中函式物件的理解JavaScript函式物件
- 我對部落格的理解和看法
- go中Tag的理解與使用Go
- 在對比中理解 Node
- 對js中執行環境、作用域和作用域鏈的理解JS
- 在 javascript 面試中對非同步的理解JavaScript面試非同步
- 對 Python 中 GIL 的一點理解Python