Disk space
SELECT DISTINCT vs.volume_mount_point, vs.file_system_type, vs.logical_volume_name, CONVERT(DECIMAL(18,2),vs.total_bytes/1073741824.0) AS [Total Size (GB)], CONVERT(DECIMAL(18,2), vs.available_bytes/1073741824.0) AS [Available Size (GB)], CONVERT(DECIMAL(18,2), vs.available_bytes * 1. / vs.total_bytes * 100.) AS [Space Free %] FROM sys.master_files AS f WITH (NOLOCK) CROSS APPLY sys.dm_os_volume_stats(f.database_id, f.[file_id]) AS vs ORDER BY vs.volume_mount_point OPTION (RECOMPILE);
Database files (detailed)
SELECT f.name AS [File Name] , f.physical_name AS [Physical Name], CAST((f.size/128.0) AS DECIMAL(15,2)) AS [Total Size in MB], CAST(f.size/128.0 - CAST(FILEPROPERTY(f.name, 'SpaceUsed') AS int)/128.0 AS DECIMAL(15,2)) AS [Available Space In MB], CAST(f.size/128.0 - CAST(FILEPROPERTY(f.name, 'SpaceUsed') AS int)/128.0 AS DECIMAL(15,2))/CAST((f.size/128.0) AS DECIMAL(15,2))*100 as [Free space in pct], f.[file_id], fg.name AS [Filegroup Name], f.is_percent_growth, f.growth, fg.is_default, fg.is_read_only FROM sys.database_files AS f WITH (NOLOCK) LEFT OUTER JOIN sys.filegroups AS fg WITH (NOLOCK) ON f.data_space_id = fg.data_space_id ORDER BY f.[file_id] OPTION (RECOMPILE);
Total DB space (all files combined)
SELECT cast(SUM(f.size/128.0) AS DECIMAL(15,2)) AS [Total Size in MB], CAST(CAST(sum(FILEPROPERTY(f.name, 'SpaceUsed')) as int)/128 AS DECIMAL(15,2)) as [Total space used], 100-cast(CAST(CAST(sum(FILEPROPERTY(f.name, 'SpaceUsed')) as int)/128 AS DECIMAL(15,2)) / cast(SUM(f.size/128.0) AS DECIMAL(15,2))*100 as decimal(15,2)) as [Total free pct] FROM sys.database_files AS f WITH (NOLOCK) LEFT OUTER JOIN sys.filegroups AS fg WITH (NOLOCK) ON f.data_space_id = fg.data_space_id where f.type = 0 OPTION (RECOMPILE);
All instance files (sorted by size)
SELECT mf.name, db.name, mf.physical_name, type_desc AS FileType, CAST(mf.size/128.0 AS DECIMAL(15,2)) as file_size_mb FROM sys.master_files mf INNER JOIN sys.databases db ON db.database_id = mf.database_id order by mf.size desc;