国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 開發 > 綜合 > 正文

帶你輕松掌握行分鏈與行遷移的相關概念

2024-07-21 02:42:06
字體:
來源:轉載
供稿:網友
 

在實際的應用中,如果行分鏈與行遷移經常刪除,那么可能不能重用塊中的自由空間,所以對于這種情況,我們要利用空間的話,可以把pctused設置高點主要是在INSERT操作期間引發行分鏈操作。而行的遷移主要由UPDATE操作引起。

行鏈接

行鏈接: Insert or Update引起,一個Row存在不同的block中, 行不同部分通過不同塊地址(ROWID)鏈成一個鏈,可以通過設置大的DB_BLOCK_SIZE來減少行鏈接的發生,但無法避免(LOB)

行遷移: Update引起,由于PCTFREE過小,ROWID未變, 可以通過增大PCTFREE的值減少行遷移的發生。

行分鏈是DB_BLOCK_SIZE設置不夠大,以至于對于一些大的行(比如varchar2(32666),blob,clob的長度,大于塊大小(比如4K))這樣一個塊肯定不能保存一行記錄,就需要將行分開保存到不同的塊中.特別是blob這樣的類型,最好設置一個單獨的表空間來保存實際的數據.

包含一個LONG/LONG RAW列時,在這種情況下,后者通常保存在最后Oracle維護一個LOB定位器允許對行外LOB快速訪問。LOB定位器,大約有24個字節大小,DISABLE STORAGE IN ROW參數來實現保存在行外(分散開),不管數據大小行分鏈很難控制(除非通過選擇DB_BLOCK_SIZE足夠大,可以裝下整個行,這通常是不可能的)。然而,行遷移可以通過CREATE / ALTER TABLE命令的PCTFREE和PCTUSED參數有效控制。

>>>>>另一種發生行鏈接是在行遷移不成功的情況下進行的,如UPDATE操作引起。當更新一行使其大小增加

而塊中的當前自由空間不足以放下該行,那么就把整個行取出來放到一個有足夠空間的塊中(如果沒有塊

有所需的空間放整行,行要分成鏈;如果即使行分成鏈仍然沒有足夠的空間,那么產生一個錯誤消息

“ORA-1650-55:Unable to extend)

行遷移

我們如果要更新一行(更新總是允許的),并將其行加大,而加大的行所需要的空間大于塊中的自由空間時.假使我們把一行中多出的空間放到另一個塊中,而另一行放在原來塊中(這就是行分鏈接),從而使原來塊100%的填充.這樣好象只會在單獨的行時會發生,ORACLE會把這整行遷移到其他能容納空間的塊中(這就是行遷移).這樣會在原來的塊中留一個行頭,行頭中保留了放實際行的塊的地址.對于行鏈接,但是應用程序從來不知道這些,使用SQL也沒有什么不同,他只是性能上的原因.如果通過索引來讀取這行,索引會指向最初的新塊不僅是使用了兩個左右的IO讀取索引,加上一個IO讀取這張表1通過使用PCTFREE保持每塊中的自由空間,允許行仍位于原來的塊中,不用管這種擴張。

如果PCTFREE為0,那么所有的自由空間將被INSERT使用,后續的UPDATE將使行遷移到另外一個塊中,以適合擴展的需要。

在理想的情況下,設置PCTFREE為位于行大小的中間值與最大值之間。例如,如果行大小的中間值估計為大約900字節,最大的行大小為1255字節,那么設置PCTFREE值在10(缺省)和30之間是比較合理的。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 志丹县| 德保县| 青州市| 新营市| 陆河县| 大渡口区| 芷江| 陇西县| 泽库县| 黄梅县| 抚顺县| 陆川县| 高雄市| 太保市| 峨边| 阳泉市| 荆州市| 丹棱县| 田林县| 东丰县| 棋牌| 拜城县| 常德市| 普兰店市| 翁牛特旗| 泾源县| 亳州市| 镇坪县| 梅河口市| 定西市| 英山县| 怀宁县| 连州市| 道孚县| 永川市| 安国市| 广饶县| 报价| 博兴县| 吉木乃县| 望谟县|