首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> Oracle 資料庫 >> Oracle 資料庫基礎

Oracle 資料區塊核心原理深度剖析:結構、自由空間管理、行鏈接與遷移

     編輯:Oracle 資料庫基礎

資料區塊基礎概念

  • Oracle 最小儲存/讀寫單位,對應固定磁碟空間
  • 非作業系統區塊,Oracle 每次 I/O 以區塊為單位(整數倍)
  • 標準大小由 DB_BLOCK_SIZE 指定;9i+ 支援標準與非標準區塊並存(最多 5 種非標準)
  • 區塊大小通常為 OS 區塊整數倍

區塊內部結構

五大區域:

  1. 區塊頭:物理地址、段類型(資料/索引段)等基本資訊
  2. 表目錄:儲存於此區塊的表相關資訊
  3. 行目錄:記錄區塊內各行位址等資訊
  4. 行資料:實際存放表/索引資料
  5. 自由空間:供新行插入、既有行更新擴展使用

頭部資訊區 = 區塊頭 + 表目錄 + 行目錄,不存資料,大小 84~107 bytes 可變。

資料區塊結構示意圖

自由空間使用機制

  • INSERT、UPDATE(導致行變長)消耗自由空間
  • DELETE、UPDATE(縮減欄位值)釋放空間,但不一定連續
  • Oracle 通常不主動合併碎片空間(影響效能),僅在 INSERT/UPDATE 找不到連續空間時才合併

自由空間管理兩種模式

特性自動管理 (ASSM)手動管理
機制位圖追蹤區塊PCTFREE/PCTUSED 參數
優點易用、空間利用率高、即時調整—
缺點—複雜、難掌握、易造成浪費
  • PCTFREE:預留最小自由空間百分比,供 UPDATE 使用,不足則產生行遷移
  • PCTUSED:已用空間比例低於此值才標記為可插入狀態

行鏈接與行遷移

行鏈接

單行資料過大,一個區塊裝不下,Oracle 將其分段存放於多個區塊。行鏈接示意圖

行遷移

UPDATE 導致行變長,原區塊無足夠空間,Oracle 將整行移至新區塊,原區塊留指標指向新區塊,ROWID 不變。行遷移示意圖

兩者皆導致讀取需掃描多區塊,增加 I/O,降低效能。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved