
以下为 Oracle 19c 中 V$ASM_DISK_SPARSE 动态性能视图的全面解析:
1. 作用
V$ASM_DISK_SPARSE 专用于监控 稀疏磁盘(Thin-Provisioned Disks) 的空间分配和使用情况。它提供:
- 逻辑分配空间 vs 物理实际占用空间的对比
- 精简配置磁盘的空间利用率
- 空间回收效率数据
- 存储过度分配风险预警
2. 使用场景
- 容量优化:监控实际物理空间消耗,避免过度分配
- 存储回收:识别可回收空间的磁盘(如删除文件后的未释放空间)
- 云成本管理:在云环境(AWS EBS, Azure Managed Disks)中优化存储成本
- 空间预警:检测物理空间接近分配上限的磁盘
- 性能调优:空间碎片化导致的性能问题诊断
- 存储迁移:评估迁移到精简配置的可行性
3. 字段含义 (Oracle 19c)
| 字段名 | 数据类型 | 说明 |
|---|---|---|
GROUP_NUMBER | NUMBER | 磁盘所属ASM磁盘组编号 |
DISK_NUMBER | NUMBER | ASM磁盘在组内的编号 |
INST_ID | NUMBER | 实例ID(RAC环境) |
TOTAL_MB | NUMBER | 逻辑分配空间(MB) - 呈现给ASM的总容量 |
FREE_MB | NUMBER | 可用空间(MB) - 未分配的预留空间 |
USABLE_FILE_MB | NUMBER | 实际可用空间(MB) - 考虑冗余后的有效空间 |
REQUIRED_MIRROR_FREE_MB | NUMBER | 冗余要求保留的空间(MB) |
ALLOCATED_MB | NUMBER | 物理已分配空间(MB) - 存储后端实际占用的空间 |
USED_MB | NUMBER | 数据占用空间(MB) - ASM文件实际使用的空间 |
IS_THIN | VARCHAR2(3) | 是否为稀疏磁盘(‘YES’/‘NO’) |
SPARSE_STATUS | VARCHAR2(12) | 空间状态:FULL - 完全分配SPARSE - 精简配置UNKNOWN - 状态未知 |
RECLAIMABLE_SPACE_MB | NUMBER | 可回收空间(MB) - 删除文件后可释放的物理空间 |
COMPATIBILITY | VARCHAR2(40) | 磁盘组兼容性版本 |
DATABASE_COMPATIBILITY | VARCHAR2(40) | 数据库兼容性版本 |
CREATE_DATE | DATE | 磁盘创建日期 |
MOUNT_DATE | DATE | 最后挂载日期 |
4. 关键计算指标
- 空间利用率:
USED_MB / TOTAL_MB * 100 - 过度分配率:
(TOTAL_MB - ALLOCATED_MB) / TOTAL_MB * 100 - 空间回收效率:
RECLAIMABLE_SPACE_MB / TOTAL_MB * 100 - 物理空间风险:
ALLOCATED_MB / TOTAL_MB * 100(接近100%需扩容)
5. 相关视图与基表
- 相关视图:
V$ASM_DISK:磁盘基础信息(含IS_THIN字段)V$ASM_DISK_IOSTAT_SPARSE:稀疏磁盘I/O统计V$ASM_DISKGROUP:磁盘组级空间信息V$ASM_FILE:ASM文件的空间使用详情
- 基表:
数据源自ASM实例内存结构,通过ASM存储元数据和存储系统API获取物理空间信息(如Linux的BLKGETSIZE64ioctl或云平台API)
6. 工作原理
-
空间监控:
- ASM通过操作系统接口(如
ioctl)或云存储API获取物理分配空间(ALLOCATED_MB) - 逻辑空间(
TOTAL_MB)来自磁盘组定义 - 实际使用空间(
USED_MB)由ASM元数据计算
- ASM通过操作系统接口(如
-
空间回收:
- 当文件被删除时,空间标记为
RECLAIMABLE_SPACE_MB - 后台
REBALANCE操作实际释放物理空间 - 云存储需配合
UNMAP/TRIM命令通知后端释放
- 当文件被删除时,空间标记为
-
状态更新:
- 空间信息周期性刷新(通常5-10分钟)
- 磁盘挂载/卸载时重置统计
- RAC环境中各实例独立收集本地磁盘信息
7. 常用 SQL 查询示例
(1) 查看所有稀疏磁盘空间状态
SELECT
d.name AS disk_name,
d.path,
s.total_mb,
s.allocated_mb,
s.used_mb,
s.reclaimable_space_mb,
ROUND(s.used_mb / s.total_mb * 100, 2) AS used_pct,
ROUND(s.allocated_mb / s.total_mb * 100, 2) AS alloc_pct
FROM
v$asm_disk_sparse s
JOIN
v$asm_disk d ON (s.group_number = d.group_number AND s.disk_number = d.disk_number)
WHERE
s.is_thin = 'YES';
(2) 检测物理空间风险(>90%占用)
SELECT
g.name AS dg_name,
d.name AS disk_name,
s.allocated_mb,
s.total_mb,
ROUND(s.allocated_mb / s.total_mb * 100, 2) AS alloc_pct
FROM
v$asm_disk_sparse s
JOIN
v$asm_disk d USING (group_number, disk_number)
JOIN
v$asm_diskgroup g USING (group_number)
WHERE
s.is_thin = 'YES'
AND s.allocated_mb / s.total_mb > 0.9; -- 阈值
(3) 查找可回收空间 >1GB的磁盘
SELECT
d.name,
s.reclaimable_space_mb AS reclaim_mb,
s.total_mb,
ROUND(s.reclaimable_space_mb / s.total_mb * 100, 2) AS reclaim_pct
FROM
v$asm_disk_sparse s
JOIN
v$asm_disk d USING (group_number, disk_number)
WHERE
s.reclaimable_space_mb > 1024 -- 1GB
ORDER BY
reclaim_mb DESC;
(4) 按磁盘组汇总稀疏空间使用
SELECT
g.name AS dg_name,
COUNT(*) AS thin_disks,
SUM(s.total_mb) AS total_mb,
SUM(s.allocated_mb) AS allocated_mb,
SUM(s.used_mb) AS used_mb,
ROUND(SUM(s.used_mb) / SUM(s.total_mb) * 100, 2) AS used_pct,
ROUND(SUM(s.allocated_mb) / SUM(s.total_mb) * 100, 2) AS alloc_pct
FROM
v$asm_disk_sparse s
JOIN
v$asm_diskgroup g ON (s.group_number = g.group_number)
GROUP BY
g.name;
(5) 空间回收操作(需结合REBALANCE)
-- 检查可回收空间
SELECT SUM(reclaimable_space_mb) FROM v$asm_disk_sparse;
-- 发起重平衡释放空间
ALTER DISKGROUP <dg_name> REBALANCE POWER 32 WAIT;
8. 注意事项
- 刷新延迟:物理空间信息非实时更新(通常5-10分钟延迟)
- 云平台差异:
- AWS EBS:
allocated_mb对应VolumeBytesUsed - Azure:
allocated_mb对应UsedBytes
- AWS EBS:
- 空间回收要求:
- 需启用
COMPATIBLE.ASM>= 12.1 - 存储系统需支持
UNMAP(Linux内核>=3.7) - 云盘需开启"精简配置"功能
- 需启用
- 性能影响:空间回收操作消耗I/O资源,需在低峰期执行
- RAC环境:需在所有实例查询视图获取全局状态
总结
V$ASM_DISK_SPARSE 是管理ASM精简配置存储的核心视图,通过精确展示:
- 逻辑分配空间(
TOTAL_MB) - 物理占用空间(
ALLOCATED_MB) - 实际数据空间(
USED_MB) - 可回收空间(
RECLAIMABLE_SPACE_MB)
帮助DBA优化云存储成本、预防空间耗尽风险、提高存储利用率。结合REBALANCE操作可实现空间回收,但需注意平台兼容性和性能影响。
欢迎关注我的公众号《IT小Chen》
1828

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



