1.Oracle數據塊與操作系統數據塊
Oracle數據塊和操作系統數據塊不同,它通常是操作系統數據塊大小的若干倍(最高為5倍)。假如操作系統每次讀寫磁盤的數據塊是512K,而Oracle的數據塊大小為其2倍,那么數據庫中參數:DB_BLOCK_SIZE = 512 * 2。也就是說Oracle每次讀寫磁盤的I/O大小是1M。將每次讀入1M數據或寫入1M數據。
2.Oracle數據塊格式
Oracle的數據塊中包含了以下信息:
1.基本信息:塊的地址和數據類型
2.表信息:存儲的數據是那個表的
3.行信息:存儲的是哪些數據(可多條)
4.數據區:持久化的信息
5.空白區:為用于數據存儲的空白區域
3.Oracle何時對數據塊碎片進行整理
由于刪除或更新而被釋放出來的空間可能是不連續的。Oracle會在以下兩種情形下對這些不連續的空間進行歸并:
①當一個Insert,update語句試圖使用一個剩余空間不足的數據塊時。
②剩余空間被分散成多個碎片而無法連續利用
其它情況下Oracle不會對數據塊的碎片進行整理。因為這種對碎片的整理,歸并工作比起數據寫入更新可能更加耗時。
4.PCTFREE、PCTUSED參數
PCTFREE和PCTUSED參數允許用戶對Oracle數據塊的空白區(Free space)進行管理。
①PCTFREE:保留的可用空白空間大小
②PCTUSED:可用的最大數據空間
PCTFREE: 只要剩余空白空間降低到PCTFREE指定的水平,將不允許新記錄插入,而僅允許本記錄更新
PCTUSED:只要已使用空間達到PCTUSED指定的水平,將不允許新記錄插入,而僅允許本記錄更新
這兩個參數其實是兩種不同的控制可用空間說法
5.插入操作與PCTFREE參數
PCTFREE僅對Insert操作有用,但對Update無效。也就是說當空用空間降低到PCTFREE指定的水平時,將不再允許Insert操作,但Update操作可以照常使用剩余空間。
Oracle為每個段維護一或多個空用鏈表,這些鏈表上的對象是每一個未分配的數據塊,已經分配出去但剩余空間被PCTFREE大的數據塊。這些數據塊都是可以被用于插入新記錄的。
假如一個數據塊的剩余空間比PCTFREE指定的要小,但又達到PCTUSED的水平。那么Oracle將把該數據塊從可用鏈表上摘下來,因為該數據塊肯定是不能用于再插入新記錄的了(這個時候就需要進行前面我們提到的數據塊碎片整理了)。
6.刪除、更新操作與PCTUSED參數
如果執行了一個Delete或Update語句后,Oracle會檢查當前該數據塊的可用空間。判斷其是否比PCTUSED指定的值小,如果是的話將其掛到可用鏈表上作為第一個可分配空間。
7.PCTFREE與PCTUSED參數配合使用
①插入操作前檢查數據塊的PCTFREE值
②刪除或更新操作后檢查數據塊的PCTUSED值
如果PCTFREE值大于指定的水平,或PCTUSED值小于指定的水平則作為可分配空間掛到Free list鏈表上。
-------------------------------------------------------------
生活就像打牌,不是要抓一手好牌,而是要盡力打好一手爛牌。
posted on 2008-12-21 14:58
Paul Lin 閱讀(653)
評論(0) 編輯 收藏 所屬分類:
Oracle Concept