oracle concept——data block,extent,segment-01
現在開始再次下定決定好好看看oracle concept,幾個月前看了一兩天太抽象了後面就慢慢沒怎麼看了,要堅持啊!裡面對oracle資料庫體系結構和原理的講解很全面,而且文件中有些細節後面需要再檢視別的資料結合實際來驗證,精度細讀之.
當建立一個物件表,索引或者分割槽表等,將會建立一個這個物件的段,如果段內空間不足將分配新的extent,但是段內的資料是透過block來管理也是最小的I/O單位。
Block是資料庫中的最小單位,Block中主要分為:
塊頭:主要記錄的是塊的型別 塊的地址
表目錄區:此資料塊的對應的表的資訊
行目錄區:此資料塊的對應的資料行片段資訊,因為有些資料行資訊可能無法放置在一個資料塊中,此時可能會發生資料行遷移或者連結。
(當一個資料塊中資料行被清除後,此時的行目錄區依然沒有被回收,只有在資料塊中insert 新資料時,行目錄區才會被重新利用。)
行資料:表或索引的實際資料,一個資料行可以跨多個資料塊
可用空間區:此資料塊的可用空間,如果此資料塊屬於索引,簇表或表的資料段,在其可用空間區中還可能儲存事務條目。此資料塊中資料行row正在dml語句訪問,此資料快中就需要儲存事務條目transaction entry
管理開銷:
上述的資料塊塊頭,行目錄區,表目錄區一起稱為管理開銷
行遷移和行連結:
資料行遷移是因為往一個block中插入資料行時,一個資料塊無法容納,這種情況oracle將此資料行儲存在段內一個資料鏈chain中,在插入大量資料時會發生資料行遷移。
資料連結在因為更新一個block中資料行資訊時,更新後的欄位導致block中無法容納此資料行,此時會在原資料行的位置儲存一個資料塊的指標,被遷移資料行的rowid保持不變。
此時由於訪問更多的資料塊,將造成更多的I/O消耗。
擴充套件
在資料塊的上一級儲存單位是資料擴充套件extent,段內空間的分配都是以擴充套件為單位的,擴充套件是在物理位置連續的資料塊。一個資料擴充套件存在於同一資料檔案上。當需要新的資料擴充套件時,此時將為這個段分配新的資料擴充套件,也就是增量資料擴充套件。大於或等於已有資料擴充套件。
為了管理需要,段頭都包含此段內資料擴充套件的目錄
Oracle8I後都是本地管理表空間,此時無法指定表空間的initial,next,pctincrease和minextents,但是可以作用於段,對於temporary tablespace,必須指定uniform固定容量。
本地管理的表空間分配:
Oracle為段分配新的資料擴充套件時,先找到此段的表空間所在的資料檔案,檢視資料檔案頭部點陣圖,如果有足夠的連續可用空間就分配使用,沒有就繼續查詢別的資料檔案。
本地管理的表空間回收:
Oracle資料庫提供了segment advisor工具,依據方案物件schema object儲存空間中的碎片程度來判斷此物件中是否包含可回收的空間
一般來說,使用者將一個段對應的方案物件移除drop之前,此段的資料擴充套件不會被回收到空間中,不過例外有:
1 使用truncate。。。drop storage將表 cluster的資料清除
2 命令回收段中未使用的資料擴充套件
alter tables tablename deallocate unused
3如果user為回滾段rollback segment設定了optimal引數,oracle將週期性地從其中回收資料擴充套件
被釋放的資料擴充套件後,所屬資料檔案頭部更新點陣圖或者更新字典管理的uet$和fet$,然後oracle將被釋放的資料擴充套件作為資料檔案中的可用擴充套件,用於下次段內的需求分配,此時原擴充套件的資料無法訪問。
段
資料擴充套件組成一個段,Oracle新建物件時會為此物件建立段,索引存在於自身的索引段內,表存在於自身的表段內等,由於段中可能需要重新分配新的extent,段內的extent可能儲存在另一資料檔案中,但是一個段必須存在於同一表空間,段中的資料擴充套件可以不連續。
Oracle訪問資料的單位:
oracle每次訪問資料時,總是訪問整數個oracle資料塊,也就是db_block_size為單位來訪問
這樣主要是減少不必要的I/O
資料塊可用空間的有效性及最佳化::
資料塊中釋放的空間利用:
當delete或者update更新資料行中的資料為容量更小時,此時會釋放資料塊中的空間,下面這兩種情況釋放的空間可以被後續的insert使用:1如果delete或者update和insert
在同一事務可以使用 2 如果不在同一事務要等到insert需要該資料塊的空間時使用
資料塊的中可用空間合併:
當然上述釋放的空間與可用空間在一個資料塊中並不一定是連續的,當insert或update時選中一個有足夠可用空間容納新資料的資料塊,但是此資料塊的可用空間不連續,資料無法被寫入連續的空間中,此時oracle就會合並相應的可用空間,這樣主要是為了防止過於頻繁的空間合併消耗資源。
[@more@]來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/25362835/viewspace-1054573/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- block/extent/segment的理解BloC
- Oracle Data block 的物理結構OracleBloC
- Oracle 的 data block研讀(二)OracleBloC
- oracle10g data block structureOracleBloCStruct
- table/segment/extent/block之間關係BloC
- Oracle 19c Concepts(05):Data IntegrityOracle
- Export data from a data blockExportBloC
- Oracle 區 EXTENTOracle
- 原創:oracle data block 內部結構分析OracleBloC
- Oracle 19c Concepts(09):Data Concurrency and ConsistencyOracle
- Oracle 19c Concepts(06):Data Dictionary and Dynamic Performance ViewsOracleORMView
- [轉載]ORA-01578: ORACLE data block corruptedOracleBloC
- Oracle Data block 的物理結構-體系架構OracleBloC架構
- Oracle Extent引數問題Oracle
- DATA BLOCK內部結構BloC
- oracle fragment conceptOracleFragment
- DATA BLOCK內部結構圖BloC
- Spring Boot with Spring Data JPA (1) - ConceptSpring Boot
- Oracle Temp Table ConceptOracle
- Oracle 19c Concepts(00):Changes in This Release for Oracle Database ConceptsOracleDatabase
- oracle segment space management and extent management幾則Oracle
- Availability and Optimization of Free Space in a Data Block(五)AIBloC
- Availability and Compression of Free Space in a Data BlockAIBloC
- oracle dump blockOracleBloC
- oracle block type!OracleBloC
- ORACLE BLOCK DUMPOracleBloC
- oracle hot blockOracleBloC
- Oracle Concepts - pfile and spfileOracle
- 【ORACLE CONCEPT】控制檔案Oracle
- Oracle 19c Concepts(19):Concepts for Database DevelopersOracleDatabaseDeveloper
- oracle block phisical address to block#OracleBloC
- Oracle Log Block SizeOracleBloC
- Oracle Find block in ASMOracleBloCASM
- oracle block 格式 (zt)OracleBloC
- DMT 模式下Oracle Extent空間管理 -- uet$ & fet$模式Oracle
- DMT 模式下Oracle Extent空間管理 -- uet$ & fet$模式Oracle
- Script:Translate RDBA relative data block addressBloC
- 模擬data block lost write的簡單方法BloC