最为DBA监控磁盘使用状况是非常非常非常(重要的事情说三遍)重要的工作.
磁盘空间资源的耗尽将造成实例错误,不能继续使用等等问题.
那么如何监控磁盘的使用状况?
自动: 报警应用系统监视器SMON,可以提供自动监控功能.
手动:
- 使用查询 SYS.DM_OS_VOLUME_STATS
- 使用Powershell
- 使用wmi
- 使用PERFMON
今天先说说Query的方式来查询磁盘使用信息.
--显示磁盘的可用空间信息
EXEC sys.xp_fixeddrives
SELECT DISTINCT
vs.volume_mount_point AS [盘符] ,
( vs.total_bytes / 1024 ) / 1024 [总大小 MB] ,
( vs.available_bytes / 1024 ) / 1024 AS [可用 MB] ,
CAST(CAST(( 1.0 * ( ( vs.available_bytes / 1024 ) / 1024 ) )
/ ( ( vs.total_bytes / 1024 ) / 1024 ) AS DECIMAL(9, 4)) * 100 AS DECIMAL(9,2)) AS [百分比 %]
FROM sys.master_files mf
CROSS APPLY sys.dm_os_volume_stats(database_id, file_id) vs;
使用空间信息得到后,还有一个是非常非常非常关键的, 就是增长量的潜在能力问题. 下面的代码可以查看潜在增长
SELECT mf.database_id AS [DBID] ,
name AS '名称',
mf.file_id AS '文件ID' ,
CAST(CASE WHEN is_percent_growth = 1
THEN ( ( size * 8 ) * ( growth / 100.0 ) ) / 1024
ELSE ( growth * 8 ) / 1024
END AS DECIMAL(18, 4)) AS [下次增长 MB] ,
( vs.available_bytes / 1024 ) / 1024 AS [可用 MB]
FROM sys.master_files mf
CROSS APPLY sys.dm_os_volume_stats(database_id, file_id) vs
WHERE CAST(CASE WHEN is_percent_growth = 1
THEN ( ( size * 8 ) * ( growth / 100.0 ) ) / 1024
ELSE ( growth * 8 ) / 1024
END AS DECIMAL(18, 4)) > ( ( vs.available_bytes / 1024 )
/ 1024 ) / 2; /*这个地方的2 标明在2次增长后会超过配额;*/
总结:
使用DMV可以在DBA的日常工作中提供很多必要的信息.希望大家能活用起来.