pctused, pctfree, pctincrease , 行遷移 & 行連結
雖然以前都有理解這些概念,但是今天偶爾看看網上的一些討論,發現還是有一些不知道的東西 。
--------------------------------------------------------------
關於pctincrease與空間碎片回收的幾點看法
1.PCTINCREASE>0 的時候SMON 會自動合併表空間中的碎片,等於0的時候只能手工回收
2.PCTINCREASE>0 造成extent不一致甚至可能因為幾何增長的緣故造成一個next需要的餓空間太大
3.固定的next且較小可能造成表的儲存段太離散,對查詢很不利
我的意見是碎片能合併(回收)但是並不等於能利用:
而造成碎片的原因是因為表的儲存的段離散而extent不一致所造成的
一旦PCTINCREASE>0 ,如果next較多會造成很多問題
你就算能合併碎片,但是這些空間也不能很好的利用,甚至很肯能利用率比較底
很簡單的一個例子:
3+4=7 這是smon合併相臨碎片 ,但是這時由於PCTINCREASE>0 的原因,有可能的話,
next extent已經為5了, 那麼,7-5=2這部分就幾乎永遠浪費了(除非重建表空間)
所以,儘量保持在表空間所有表的next一致,然後PCTINCREASE=0
這樣,就算smon不自動合併臨近的碎片,這些碎片也能重複利用
如果能定期的手工合併,那當然也是可以的
注意: 這裡所說的碎片完全是指表truncate或者drop後釋放出來的空間
不是delete後留下來的空間,smon是不能解決delete所浪費的空間
能讓表釋放空間只有3種情況:
1)drop table.........
2)truncate table .....drop storage....把表的資料刪除只剩一個表頭
3)alter table ..... deallocate unused 改變表的高水位
如果在表裡刪除一些行,然後往這個表裡insert,當然會利用delete出來那些空間
為什麼delete不能釋放空間?
道理很簡單,oracle下為物件分配儲存空間是以extent作單位的,你刪除的行可能是梅花插竹互相隔離的,如果每個block都有一些行刪除了,也有
一些沒刪除的,你要oracle怎麼釋放(塊是操作最小單位)?如果每次delete的時候都要oracle去檢查一下有沒有一個完整的範圍可以釋放,這又要
消耗額外的效能,而且是沒必要的(因為能釋放的機會太低了)
SMON 合併相鄰碎片只針對tablespace的default storage。不針對table storage .
------------
Oracle9i 下忽略掉pctused , pctfree仍然有效,是因為9i下可以支援ASSM(auto segment space manangement),
導致pctused 失效, 相當於有多個pctused , 使用點陣圖標示 2bit , 25%, 50%, 75% 等 。
------------
pctused =40 , 實際使用空間<40% , 可以用該塊插入資料。
pctfree =10 , 插入資料到剩餘空間只有10%時 , 不能在該塊插入資料。
行連結: 行連結產生在第一次插入資料的時候如果一個block不能存放一行記錄的情況下。
、這種情況下,Oracle將使用連結一個或者多個在這個段中保留的block儲存這一行記錄,
比較容易發生在比較大的行上。比如Long, LOB等。
只能增大 db_block_size 來清除行連結 。
行遷移: 當一行記錄初始插入的時候事可以儲存在一個block中的,由於更新操作導致行長增加了
,而block的自由空間已經完全滿了,這個時候就產生了行遷移。在這種情況下,Oracle將會遷移整
行資料到一個新的block中(假設一個block中可以儲存下整行資料),Oracle會保留被遷移行的原始
指標指向新的存放行資料的block,這就意味著被遷移行的ROW ID是不會改變的。
pctfree設定過小是導致行遷移的一個原因。設定太大可能導致空間利用率低下 。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/35489/viewspace-555656/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- block學習(pctfree&pctused),行遷移問題(zt)BloC
- 行遷移和行連結
- 清除行遷移和行連結
- 行遷移_行連結的介紹
- 如何消除行連結和行遷移
- Oracle8i 與Oracle9i 中對pctused 和pctfree, pctincrease 的理解Oracle
- 模擬Oracle行遷移和行連結Oracle
- 行遷移和行連結的檢測
- Oracle pctfree 和 pctusedOracle
- oracle pctfree與pctusedOracle
- 【備份恢復】行遷移與行連結
- 排除表中的行連結和行遷移
- 關於行連結和行遷移和消除
- Oracle 行遷移 & 行連結的檢測與消除Oracle
- Oracle資料庫中資料行遷移與行連結Oracle資料庫
- Row Migration and Row Chaining(行遷移和行連結)AI
- oracle pctfree和pctused詳解Oracle
- pctfree和pctused的區別。
- How PCTFREE and PCTUSED Work Together(十)
- PCTFREE, PCTUSED, and Row Chaining(七)AI
- 【轉載】行遷移和行連結(row chaining or row migration)AI
- 【效能優化】消除行連結和行遷移的思路和方法優化
- 【概念】行連結和行遷移的概念、模擬及甄別
- 【效能最佳化】消除行連結和行遷移的思路和方法
- [20160726]行連結行遷移與ITL槽.txt
- Oracle中行遷移和行連結的清除及檢測Oracle
- Oracle資料庫的PCTFREE與PCTUSEDOracle資料庫
- [20160729]行連結行遷移與ITL槽4.txt
- [20160727]行連結行遷移與ITL槽2.txt
- [20160728]]行連結行遷移與ITL槽3.txt
- 行連結與行遷移, LOB欄位的儲存及效能影響
- 【轉】【效能最佳化】消除行連結和行遷移的思路和方法
- [20180402]行連結行遷移與ITL槽6.txt
- 行連結(Row chaining)和行遷移(Row Migration)的讀書筆記AI筆記
- 簡單瞭解 oracle update 原理(測試)、 行遷移/行連結基本認識Oracle
- 高水位線、行遷移行連結
- 查詢行遷移及消除行遷移(chained rows)AI
- 關於Oracle資料庫中行遷移/行連結的問題Oracle資料庫