1.1、存储空间监控
sql
-- 表空间使用率(综合视图)
SELECT ts.tablespace_name,
ROUND(ts.total_mb, 0) total_mb,
ROUND(ts.total_mb - NVL(fs.free_mb, 0), 0) used_mb,
ROUND(NVL(fs.free_mb, 0), 0) free_mb,
ROUND((ts.total_mb - NVL(fs.free_mb, 0)) / ts.total_mb * 100, 1) used_pct
FROM (SELECT tablespace_name,
SUM(bytes) / 1024 / 1024 total_mb
FROM dba_data_files
GROUP BY tablespace_name) ts
LEFT JOIN (SELECT tablespace_name,
SUM(bytes) / 1024 / 1024 free_mb
FROM dba_free_space
GROUP BY tablespace_name) fs
ON ts.tablespace_name = fs.tablespace_name
ORDER BY used_pct DESC;
-- ASM磁盘组使用率
SELECT name, state, type,
ROUND(total_mb/1024, 1) total_gb,
ROUND(free_mb/1024, 1) free_gb,
ROUND((total_mb - free_mb)/total_mb * 100, 1) used_pct
FROM v$asm_diskgroup
ORDER BY used_pct DESC;
-- 数据文件I/O统计
SELECT f.file_name,
s.phyrds reads,
s.phywrts writes,
s.readtim read_time_ms,
s.writetim write_time_ms,
ROUND(s.readtim / NULLIF(s.phyrds, 0), 2) avg_read_ms,
ROUND(s.writetim / NULLIF(s.phywrts, 0), 2) avg_write_ms
FROM v$filestat s
JOIN dba_data_files f ON s.file# = f.file_id
ORDER BY s.phyrds + s.phywrts DESC
FETCH FIRST 20 ROWS ONLY;
1.2、存储性能优化
常见的存储性能优化手段:
- I/O **分散:**将数据文件分散到不同的ASM磁盘组或物理磁盘
- **减少碎片:**使用Bigfile + ASM条带化减少文件管理开销
- **行迁移控制:**合理设置PCTFREE,避免行迁移
- **统计信息:**定期收集统计信息,确保执行计划准确
- **分区策略:**使用分区表将热数据和冷数据分离
**REDO优化:**配置合适的REDO日志大小和组数
sql
-- 查看行链接/行迁移
ANALYZE TABLE orders COMPUTE STATISTICS;
SELECT table_name, num_rows, chain_cnt,
ROUND(chain_cnt / NULLIF(num_rows, 0) * 100, 2) chain_pct
FROM dba_tables
WHERE owner = 'APP_USER' AND chain_cnt > 0
ORDER BY chain_cnt DESC;
-- 查看REDO日志配置
SELECT group#, thread#, bytes/1024/1024 size_mb, status
FROM v$log ORDER BY group#;
-- 优化建议:REDO日志大小应能支撑15-30分钟的事务量
-- 查看日志切换频率
SELECT TO_CHAR(first_time, 'YYYY-MM-DD HH24') log_hour,
COUNT(*) switches
FROM v$log_history
WHERE first_time > SYSDATE - 7
GROUP BY TO_CHAR(first_time, 'YYYY-MM-DD HH24')
ORDER BY log_hour;
实例:存储 I/O 性能全面优化
S --- Situation(场景): 某OLTP系统数据库出现严重性能问题,AWR报告显示:
db file sequential read平均等待时间12ms(正常应<5ms),
db file scattered read平均等待时间25ms(正常应<10ms),
用户反映系统响应时间从200ms劣化到2s以上。
T --- Task **(任务):**全面分析I/O瓶颈并实施优化方案,将响应时间恢复到500ms以内。
A --- Action(行动):
1、分析AWR报告Top Wait Events,确认I/O是主要瓶颈;
2、检查数据文件分布:发现80%的数据文件集中在同一个ASM磁盘组;
3、检查REDO日志:仅3组,每组200MB,日志切换频率过高(每分钟1-2次);
4、实施优化:
a、将数据文件按访问模式分散到DATA_D、DATA_I、DATA_H三个磁盘组
b、扩大REDO日志到2GB×6组
c、调整db_file_multiblock_read_count=16
d、启用异步I/O(filesystemio_options=SETALL)
5、验证优化效果。
**R --- Result(结果):**db file sequential read从12ms降至3ms,db file scattered read从25ms降至7ms。数据库响应时间从2s降至350ms,满足SLA要求。日志切换频率从每分钟1-2次降至每15-20分钟一次,redo log switch等待基本消除。系统TPS从8000提升至22000,整体吞吐量提升175%。
1.3、表空间设计原则
- **分类存放:**按业务类型(数据/索引/LOB/临时)创建独立表空间,便于管理和优化。
- **统区大小:**对大表和OLAP场景使用UNIFORM SIZE(推荐1MB-4MB),减少碎片。
- **Bigfile优先:**ASM环境下优先使用Bigfile表空间,简化管理。
- **自动扩展:**设置合理的AUTOEXTEND和MAXSIZE,避免空间不足也避免无限增长。
- **只读归档:**历史数据表空间设为READ ONLY,减少备份量和SGA开销。
1.4、存储监控检查清单
- 每日:表空间使用率检查(阈值80%预警,90%告警)
- 每日:ASM磁盘组使用率和重平衡状态
- 每周:数据文件I/O分布分析
- 每周:段碎片率检查(行链接/行迁移)
- 每月:表空间增长趋势分析和容量规划
- 每月:存储性能基线对比(AWR/ASH报告)
每季度:存储架构评审和优化建议