
以下是对 Oracle 19c 中 V$ASM_DISK_SPARSE_STAT 动态性能视图的全面解析:
1. 作用
V$ASM_DISK_SPARSE_STAT 提供稀疏磁盘(Thin-Provisioned Disks)的历史统计信息,用于:
- 追踪物理空间分配变化趋势
- 分析空间回收效率
- 监控存储空间过度分配风险
- 诊断空间碎片化问题
- 评估存储成本优化效果
📌 区别于
V$ASM_DISK_SPARSE(当前状态),此视图提供时间序列数据,是容量规划的关键工具。
2. 使用场景
- 容量趋势分析:监控物理空间增长趋势
- 回收效率评估:量化
UNMAP/TRIM操作效果 - 异常检测:识别异常空间消耗模式
- 成本审计:云环境中分析存储成本变化
- 性能优化:空间碎片化导致的 I/O 性能问题诊断
- 存储迁移:评估迁移到精简配置的长期效益
3. 字段含义 (Oracle 19c)
| 字段名 | 数据类型 | 说明 |
|---|---|---|
GROUP_NUMBER | NUMBER | 磁盘组编号 |
DISK_NUMBER | NUMBER | 磁盘编号 |
INST_ID | NUMBER | 实例ID (RAC) |
SNAPSHOT_TIMESTAMP | TIMESTAMP | 统计快照时间 |
TOTAL_MB | NUMBER | 逻辑总空间(MB) |
ALLOCATED_MB | NUMBER | 物理已分配空间(MB) |
USED_MB | NUMBER | 实际使用空间(MB) |
RECLAIMABLE_SPACE_MB | NUMBER | 可回收空间(MB) |
ALLOCATION_CHANGE_MB | NUMBER | 自上次快照分配变化量(MB) |
USED_CHANGE_MB | NUMBER | 自上次快照使用变化量(MB) |
RECLAIMED_SPACE_MB | NUMBER | 自上次快照回收空间量(MB) |
UNMAP_OPERATIONS | NUMBER | UNMAP操作次数 |
UNMAP_BYTES | NUMBER | UNMAP操作字节数 |
ALLOCATION_RATE_MB_PER_MIN | NUMBER | 空间分配速率(MB/分钟) |
RECLAIM_RATE_MB_PER_MIN | NUMBER | 空间回收速率(MB/分钟) |
FRAGMENTATION_PCT | NUMBER | 空间碎片化百分比 |
4. 关键指标分析
- 空间增长率:
ALLOCATION_RATE_MB_PER_MIN(物理空间)
USED_CHANGE_MB / time_diff(逻辑空间) - 回收效率:
RECLAIMED_SPACE_MB / RECLAIMABLE_SPACE_MB - 碎片化影响:
高FRAGMENTATION_PCT值(>30%)预示性能风险 - UNMAP 效率:
UNMAP_BYTES / UNMAP_OPERATIONS(每次操作回收量)
5. 相关视图与基表
- 相关视图:
V$ASM_DISK_SPARSE:当前稀疏磁盘状态V$ASM_DISK_IOSTAT_SPARSE:稀疏磁盘 I/O 统计DBA_HIST_ASM_DISK_SPARSE:AWR 历史数据(需诊断包)V$ASM_OPERATION:空间回收操作状态
- 基表:
- 数据源自 ASM 实例的内存结构
- 快照由 MMON 后台进程定期捕获(默认 30 分钟)
- 持久化存储依赖 AWR(自动工作负载仓库)
6. 工作原理
-
数据收集:
- 每 30 分钟自动捕获快照(
SNAPSHOT_TIMESTAMP) - 通过操作系统接口(
ioctl)或云 API 获取物理空间数据 - 计算增量变化:
CURRENT_VALUE - PREVIOUS_VALUE
- 每 30 分钟自动捕获快照(
-
UNMAP 跟踪:
- 记录
ALTER DISKGROUP REBALANCE触发的 UNMAP 操作 - 统计 SCSI UNMAP 或 NVMe DEALLOCATE 命令
- 云环境映射到底层 API(如 AWS EBS
ModifyVolume)
- 记录
-
碎片化计算:
\text{FRAGMENTATION\_PCT} = \left(1 - \frac{\text{最大连续空闲空间}}{\text{总空闲空间}}\right) \times 100 -
RAC 处理:
- 每个 ASM 实例维护本地统计
- 全局视图通过
GV$ASM_DISK_SPARSE_STAT聚合
7. 常用 SQL 查询示例
(1) 磁盘空间变化趋势分析
SELECT
TO_CHAR(snapshot_timestamp, 'YYYY-MM-DD HH24:MI') AS snap_time,
allocated_mb,
used_mb,
reclaimable_space_mb,
allocation_change_mb AS alloc_delta,
used_change_mb AS used_delta
FROM v$asm_disk_sparse_stat
WHERE group_number = 1 AND disk_number = 0
ORDER BY snapshot_timestamp DESC;
(2) 检测异常空间增长(>500MB/小时)
SELECT
d.name,
s.snapshot_timestamp,
s.allocation_rate_mb_per_min * 60 AS hourly_growth_mb
FROM v$asm_disk_sparse_stat s
JOIN v$asm_disk d USING (group_number, disk_number)
WHERE s.allocation_rate_mb_per_min * 60 > 500 -- 阈值
ORDER BY hourly_growth_mb DESC;
(3) UNMAP 操作效率分析
SELECT
TO_CHAR(snapshot_timestamp, 'MM-DD HH24:MI') AS snap_time,
unmap_operations,
unmap_bytes/1048576 AS unmap_mb,
ROUND(unmap_bytes / NULLIF(unmap_operations,0)/1024) AS avg_kb_per_op
FROM v$asm_disk_sparse_stat
WHERE unmap_operations > 0
ORDER BY snapshot_timestamp DESC;
(4) 碎片化最严重的磁盘(当前快照)
WITH latest AS (
SELECT group_number, disk_number, MAX(snapshot_timestamp) AS latest_ts
FROM v$asm_disk_sparse_stat
GROUP BY group_number, disk_number
)
SELECT
g.name AS dg_name,
d.name AS disk_name,
s.fragmentation_pct
FROM latest l
JOIN v$asm_disk_sparse_stat s ON (l.group_number=s.group_number
AND l.disk_number=s.disk_number AND l.latest_ts=s.snapshot_timestamp)
JOIN v$asm_disk d USING (group_number, disk_number)
JOIN v$asm_diskgroup g USING (group_number)
WHERE s.fragmentation_pct > 20 -- 阈值
ORDER BY s.fragmentation_pct DESC;
(5) 回收操作效果验证
-- 回收前快照
INSERT INTO space_snap
SELECT group_number, disk_number, SYSTIMESTAMP, reclaimable_space_mb
FROM v$asm_disk_sparse
WHERE group_number=1 AND disk_number=0;
-- 执行回收
ALTER DISKGROUP DATA REBALANCE POWER 32 WAIT;
-- 比较回收效果
SELECT
(s.reclaimable_space_mb - pre.reclaim_mb) AS reclaimed_mb,
ROUND((s.reclaimable_space_mb - pre.reclaim_mb) / pre.reclaim_mb * 100, 2) AS pct_reclaimed
FROM v$asm_disk_sparse s
JOIN space_snap pre ON (s.group_number=pre.group_number AND s.disk_number=pre.disk_number)
WHERE pre.snap_time = (SELECT MAX(snap_time) FROM space_snap);
8. 注意事项
-
数据保留:
- 内存中保留约 24 小时数据
- 长期分析需依赖
DBA_HIST_*AWR 视图
-
云平台差异:
- AWS:
UNMAP_BYTES对应 EBSVolumeBytesConsumed变化 - Azure:
ALLOCATION_CHANGE_MB映射到UsedBytes增量 - GCP:需启用
discard选项
- AWS:
-
性能影响:
-
关键阈值:
- 空间增长率:> 100 MB/min 需调查
- 碎片化:> 30% 建议优化
- UNMAP 效率:< 1 MB/op 可能配置不当
-
最佳实践:
- 结合 AWR 报告
"ASM Space Statistics"部分 - 在云环境中启用
_asm_disk_repair_time参数 - 定期执行预防性回收:
ALTER DISKGROUP ALL REBALANCE RECLAIM /*+ NOPARALLEL */;
- 结合 AWR 报告
总结
V$ASM_DISK_SPARSE_STAT 是管理 ASM 稀疏磁盘的时间序列分析核心视图,通过提供:
- 物理空间分配历史(
ALLOCATED_MB) - 空间回收指标(
RECLAIMED_SPACE_MB,UNMAP_OPERATIONS) - 变化速率(
ALLOCATION_RATE_MB_PER_MIN) - 碎片化数据(
FRAGMENTATION_PCT)
使 DBA 能够:
- 预测存储容量需求
- 验证空间回收效率
- 诊断性能异常
- 优化云存储成本
- 制定数据生命周期策略
结合定期 REBALANCE RECLAIM 操作和云存储特性配置,可最大化精简配置存储的效益。
欢迎关注我的公众号《IT小Chen》
1828

被折叠的 条评论
为什么被折叠?



