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

Oracle ASM 存儲解決方案深度評測:架構優勢、實例內存模型與後台進程交互機制

     編輯:Oracle 資料庫基礎

一、 定位:為什麼 ASM 是 Oracle 存儲的「黃金搭檔」?

ASM (Automatic Storage Management) 非通用文件系統,而是專為 Oracle 數據庫 I/O 模式定制的存儲管理層:

  • 感知數據庫語義: 識別數據文件、控制文件、日志文件、備份集等類型,自動套用最優模板(條帶粒度、冗余級別)。
  • 無文件系統開銷: 繞過 VFS、頁面緩存、日志記錄,直接發起原始異步 I/O (`libaio`),延遲極低、CPU 佔用極少。
  • 線性擴展: 新增磁盤觸發自動再平衡,業務零中斷,性能隨磁盤數線性增長。
  • RAC 原生共享: 多實例通過 `ASMB` 進程協調鎖與元數據,無需集群文件系統。

二、 ASM 實例架構:輕量級 SGA 與專用進程

1. SGA 組成:小而精

ASM 實例無 Buffer Cache(不緩存用戶數據),SGA 僅包含:

組件用途典型佔比
Shared Pool 存儲 Extent Map(文件→Extent→磁盤映射)、磁盤組元數據、文件目錄 核心佔用,**隨磁盤組總容量線性增長**
Large Pool 再平衡操作的消息緩衝區、備份/恢復並行 I/O 緩衝 默認 12MB,大規模再平衡可適當調大
Fixed SGA 實例鎖結構、實例註冊信息 極小

2. Extent Map 容量估算公式

Shared Pool 主要消耗在 Extent Map。經驗公式:

-- 1. 統計所有存放於 ASM 的文件總大小 (GB)
SELECT SUM(bytes)/1024/1024/1024 AS total_gb FROM v$datafile;
SELECT SUM(bytes)/1024/1024/1024 FROM v$logfile a JOIN v$log b ON a.group#=b.group#;
SELECT SUM(bytes)/1024/1024/1024 FROM v$tempfile WHERE status='ONLINE';
-- 假設總和 = T GB

-- 2. 估算 Extent Map 大小 (MB)
-- External Redundancy: 1MB per 100GB
-- Normal Redundancy (2-way): 2MB per 100GB
-- High Redundancy (3-way): 3MB per 100GB
Extent_Map_MB = (T / 100) * redundancy_factor

-- 3. Shared Pool 建議值 = Extent_Map_MB + 2MB (額外緩衝) + 其他元數據
-- 實際生產中,默認 48MB 通常足夠支撐 5TB+ External Redundancy 磁盤組

3. 後台進程矩陣:ASM vs RDBMS

進程所在端核心職責關鍵參數影響
RBAL ASM 再平衡協調器:生成重組計劃、分派任務給 ARBn `ASM_POWER_LIMIT` (0-11) 控制再平衡速度/並行度
ARBn (n=0-9, 10+ 為 ARB) ASM 實際搬移 Extent 的工作進程,數量 = POWER_LIMIT 同上
RBAL RDBMS 掛載磁盤組時打開所有磁盤、參與再平衡鎖協調 無
ASMB RDBMS 核心橋樑:持久連接 ASM 實例,雙向交換 Extent Map 更新、心跳、元數據變更通知 無

三、 ASM-RDBMS 實例依賴鏈:啟動/關閉鐵律

啟動順序: 1. ASM Instance (含 CSSD/OHASD) 
         → 2. RDBMS Instance (讀取 Extent Map via ASMB)
關閉順序: 1. RDBMS Instance 
         → 2. ASM Instance

違反後果: RDBMS 啟動報 `ORA-15077: could not locate ASM instance`;ASM 先關閉導致 RDBMS 掛起或實例崩潰 (`ORA-03113`)。

四、 ASMLib 部署:裸設備管理的最佳實踐

雖可直接使用裸設備 (`/dev/raw/rawX` 或 `/dev/mapper/mpathXp1`),但 ASMLib 提供:

  • 持久化設備命名(`/dev/oracleasm/disks/VOL1`)避免設備號漂移。
  • 自動權限固化(`grid:asmadmin 0660`)免去 `udev` 規則維護。
  • 多路徑友好:僅對多路徑設備創建磁盤,自動屏蔽路徑設備。

Red Hat 7 / Oracle Linux 7 典型安裝包匹配

# 內核:3.10.0-1160.el7.x86_64
oracleasm-support-2.1.11-1.el7.x86_64.rpm
oracleasmlib-2.0.12-1.el7.x86_64.rpm
kmod-oracleasm-3.10.0-1160.el7.x86_64-2.0.8-1.el7.x86_64.rpm  # 必須精確匹配內核版本

五、 運維核心指標監控

指標查詢視圖告警閾值建議
磁盤組可用空間`V$ASM_DISKGROUP` (USABLE_FILE_MB)< 20% 觸發擴容
再平衡進行度`V$ASM_OPERATION` (EST_WORK, SOFAR, EST_RATE)持續 > 4h 未完成檢查 POWER_LIMIT
磁盤狀態`V$ASM_DISK` (STATE, MODE_STATUS, REPAIR_TIMER)STATE≠NORMAL 或 MODE_STATUS≠ONLINE 立即告警
ASM 實例 Shared Pool 使用率`V$SGASTAT` (POOL='shared pool')> 85% 考慮調大或檢查 Extent Map 膨脹
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved