Wednesday, November 30, 2011

Database Space Usage by File, Filegroup & Database




/* Database space usage for instance */


IF OBJECT_ID('tempdb..#DatabaseFileSpace') IS NOT NULL DROP TABLE #DatabaseFileSpace ;
CREATE TABLE #DatabaseFileSpace
    (
      ID INT IDENTITY(1, 1),
      DatabaseName varchar(128),
      LogicalFileName varchar(128),
      FileGroupName nvarchar(128),
      PhysicalFileName varchar(128),
      FileSizeMB float,
      SpaceUsedMB float,
      FreeSpaceMB float
    ) ;
    
   
EXEC dbo.sp_MSforeachdb '
use ?
INSERT INTO #DatabaseFileSpace 
select
''?'' as DatabaseName
    ,a.name as LogicalFileName
,isnull(g.name, ''LOG'') as FileGroupName
    ,filename as PhysicalFileName
,convert(decimal(12,2),round(a.size/128.000,2)) as FileSizeMB
,convert(decimal(12,2),round(fileproperty(a.name,''SpaceUsed'')/128.000,2)) as SpaceUsedMB
,convert(decimal(12,2),round((a.size-fileproperty(a.name,''SpaceUsed''))/128.000,2)) as FreeSpaceMB
from [?].sys.sysfiles a
left join [?].sys.filegroups g on a.groupid = g.data_space_id
'


select *
from #DatabaseFileSpace
order by DatabaseName, FileGroupName


select 
DatabaseName, 
FileGroupName,
SUM(FileSizeMB) as FileSizeMB, 
SUM(SpaceUsedMB) as SpaceUsedMB, 
SUM(FreeSpaceMB) as FreeSpaceMB
from #DatabaseFileSpace
group by DatabaseName, FileGroupName
order by DatabaseName, FileGroupName


select 
DatabaseName, 
SUM(FileSizeMB) as FileSizeMB, 
SUM(SpaceUsedMB) as SpaceUsedMB, 
SUM(FreeSpaceMB) as FreeSpaceMB
from #DatabaseFileSpace
group by DatabaseName
order by DatabaseName