ASM (Automatic Storage Management) 非通用文件系統,而是專為 Oracle 數據庫 I/O 模式定制的存儲管理層:
ASM 實例無 Buffer Cache(不緩存用戶數據),SGA 僅包含:
| 組件 | 用途 | 典型佔比 |
|---|---|---|
| Shared Pool | 存儲 Extent Map(文件→Extent→磁盤映射)、磁盤組元數據、文件目錄 | 核心佔用,**隨磁盤組總容量線性增長** |
| Large Pool | 再平衡操作的消息緩衝區、備份/恢復並行 I/O 緩衝 | 默認 12MB,大規模再平衡可適當調大 |
| Fixed SGA | 實例鎖結構、實例註冊信息 | 極小 |
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 磁盤組
| 進程 | 所在端 | 核心職責 | 關鍵參數影響 |
|---|---|---|---|
| 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 更新、心跳、元數據變更通知 | 無 |
啟動順序: 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`)。
雖可直接使用裸設備 (`/dev/raw/rawX` 或 `/dev/mapper/mpathXp1`),但 ASMLib 提供:
# 內核: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 膨脹 |