Best Report for Finding your Sql Server Database Size
Why would you wanna Find your Sql Server Database Size ?
As a day to day task in a DBA life is to be able to monitor the Entire Database Server and make sure he is aware of everything that goes around in the Database. Monitoring the size of your databases is crucial and can provide you with great information about your environment.
The script below will generate a very detailed Database Size reports such as:
Data Size , Data Size Used , Log Size , Log Size Used ,Recovery Model Type and more other metrics.
Note: you must have sysadmin privileges in order to get the full report populated.
IFOBJECT_ID('tempdb.dbo.#space')ISNOTNULLDROPTABLE#spaceCREATETABLE#space(database_idINTPRIMARYKEY,data_used_sizeDECIMAL(18,2),log_used_sizeDECIMAL(18,2))DECLARE@SQLNVARCHAR(MAX)SELECT@SQL=STUFF((SELECT'
USE ['+d.name+']
INSERT INTO #space (database_id, data_used_size, log_used_size)
SELECT
DB_ID()
, SUM(CASE WHEN [type] = 0 THEN space_used END)
, SUM(CASE WHEN [type] = 1 THEN space_used END)
FROM (
SELECT s.[type], space_used = SUM(FILEPROPERTY(s.name, ''SpaceUsed'') * 8. / 1024)
FROM sys.database_files s
GROUP BY s.[type]
) t;'FROMsys.databasesdWHEREd.[state]=0FORXMLPATH(''),TYPE).value('.','NVARCHAR(MAX)'),1,2,'')EXECsys.sp_executesql@SQLSELECTd.database_id,d.name,d.state_desc,d.recovery_model_desc,t.total_size,t.data_size,s.data_used_size,t.log_size,s.log_used_size,bu.full_last_date,bu.full_size,bu.log_last_date,bu.log_sizeFROM(SELECTdatabase_id,log_size=CAST(SUM(CASEWHEN[type]=1THENsizeEND)*8./1024ASDECIMAL(18,2)),data_size=CAST(SUM(CASEWHEN[type]=0THENsizeEND)*8./1024ASDECIMAL(18,2)),total_size=CAST(SUM(size)*8./1024ASDECIMAL(18,2))FROMsys.master_filesGROUPBYdatabase_id)tJOINsys.databasesdONd.database_id=t.database_idLEFTJOIN#spacesONd.database_id=s.database_idLEFTJOIN(SELECTdatabase_name,full_last_date=MAX(CASEWHEN[type]='D'THENbackup_finish_dateEND),full_size=MAX(CASEWHEN[type]='D'THENbackup_sizeEND),log_last_date=MAX(CASEWHEN[type]='L'THENbackup_finish_dateEND),log_size=MAX(CASEWHEN[type]='L'THENbackup_sizeEND)FROM(SELECTs.database_name,s.[type],s.backup_finish_date,backup_size=CAST(CASEWHENs.backup_size=s.compressed_backup_sizeTHENs.backup_sizeELSEs.compressed_backup_sizeEND/1048576.0ASDECIMAL(18,2)),RowNum=ROW_NUMBER()OVER(PARTITIONBYs.database_name,s.[type]ORDERBYs.backup_finish_dateDESC)FROMmsdb.dbo.backupsetsWHEREs.[type]IN('D','L'))fWHEREf.RowNum=1GROUPBYf.database_name)buONd.name=bu.database_nameORDERBYt.total_sizeDESC