Check SQL DB size and free disk space

Posted by John Liu on Thursday, October 27, 2022

Following script will list the db size for all user databases and the free disk space of the driver.

SELECT
	DBName
	,Owner
	,Create_Date
	,DBSizeGB = SUM(DBSizeGB)
	,Drive
	,DriveFreeSpaceGB = MAX(available_bytes)/1024/1024/1024
FROM
	(SELECT
		DBName = D.name
		,Owner = P.name
		,Create_Date = CONVERT(DATE,D.create_date)
		,DBSizeGB = F.size * 8 / 1024 / 1024
		,Drive = LEFT(F.physical_name,2)
		,DR.available_bytes
	FROM
		sys.databases D
		INNER JOIN
			sys.server_principals P
				ON
					D.owner_sid = P.sid
		INNER JOIN
			sys.master_files F
				ON
					D.database_id = F.database_id --AND F.type = 0
		OUTER APPLY
			sys.dm_os_volume_stats(D.database_id,1) DR
	WHERE
		D.name NOT IN ('tempdb','model','master','msdb')
		AND D.name NOT LIKE 'ReportServer$%'
		AND DR.volume_mount_point LIKE LEFT(F.physical_name,2) + '%'
	) R
GROUP BY
	DBName,Owner,create_date,Drive
ORDER BY
	--create_date,SizeGB DESC,Owner
	DBSizeGB DESC