数据库大师成长日记:使用SQL语句获取服务器磁盘信息-sql文件查看器

朋友们,如果您是数据库管理员,您肯定会非常关注目前服务器磁盘的使用情况。当然,如果数据库服务器是您可以直接控制的,想要查看服务器的磁盘情况也不难,但很多情况下,我们未必有权限直接进入服务器。

有些情况下,我们需要根据服务器的磁盘情况做特殊处理,这时候更需要在SQL脚本中直接获取服务器的磁盘信息。SQL Server为我们提供了获取磁盘信息的多种方式,今天我们就管中窥豹一番。

xp_fixeddrives:最简单的方式

SQL Server提供了系统存储过程xp_fixeddrives,执行该存储过程,即可查看数据库所在服务器的磁盘可用信息。语法格式如下:

exec master.dbo.xp_fixeddrives

数据库大师成长日记:使用SQL语句获取服务器磁盘信息

如上图所示,直接调用系统存储过程xp_fixeddrives即可查看磁盘每个分区的可用空间。

这种方式的特点是简单,当然我们获得的数据也非常简单,如果想要获得更多的磁盘该如何实现呢?

综合多个来源获取更多磁盘信息

如果需要获取更多的磁盘信息,我们需要调用系统视图master_files和系统函数dm_os_volume_stats综合处理实现。

master_files主要用来统计数据库的大小以及使用情况。dm_os_volume_stats的主要功能,可返回指定数据库和文件的操作系统卷(目录)的信息。通过使用此动态管理函数,可以检查物理磁盘驱动器的属性,或返回有关目录的可用空间的信息。

闲话咱就不说了,直接上脚本:

with cte as (
select distinct
replace(vs.volume_mount_point,':\','') as FDrive ,
cast(vs.total_bytes / 1024.0 / 1024 / 1024 as numeric(18,2)) as FSpace ,
cast(vs.available_bytes / 1024.0 / 1024 / 1024 as numeric(18,2)) as FSpaceFree
from sys.master_files as f
cross apply sys.dm_os_volume_stats(f.database_id, f.file_id) as vs
)
select
FDrive,--盘符
FSpace,--总空间
FSpace-FSpaceFree as FSpaceUsed,--已用空间
FSpaceFree,--可用空间
cast(FSpaceFree*100/FSpace as numeric(18,2)) as FSpacePercent--使用率
from cte;

这里用到了公用表表达式整合了磁盘信息数据。运行效果参考下图:

数据库大师成长日记:使用SQL语句获取服务器磁盘信息

这里返回的磁盘信息就更丰富了,包括盘符、总空间、已用空间、可用空间以及空间的使用率等。

希望对您有所帮助!

推荐阅读