Here’s a great script I use when manually resizing datafiles. It lists the percentage of free space and suggest a new size that would have 60% free.
--freespace.sql SET NOCOUNT ON IF OBJECT_ID('tempdb..#DBSTATS') IS NOT NULL BEGIN DROP TABLE #DBSTATS END CREATE TABLE #DBSTATS ( [dbname] sysname, lname sysname, usage varchar(20), [size] decimal(9, 2) NULL , [used] decimal(9, 2) NULL ) IF OBJECT_ID('tempdb..#temp_log') IS NOT NULL BEGIN DROP TABLE #temp_log END CREATE TABLE #temp_log ( DBName sysname, LogSize real, LogSpaceUsed real, Status int ) IF OBJECT_ID('tempdb..#temp_sfs') IS NOT NULL BEGIN DROP TABLE #temp_sfs END CREATE TABLE #temp_sfs ( fileid int, filegroup int, totalextents int, usedextents int, name varchar(1024), filename varchar(1024) ) DECLARE @dbname sysname ,@sql varchar(8000) IF OBJECT_ID('tempdb..#temp_db') IS NOT NULL BEGIN DROP TABLE #temp_db END SELECT name INTO #temp_db FROM master.dbo.sysdatabases WHERE DATABASEPROPERTY(name,'IsOffline') = 0 AND has_dbaccess(name) = 1 ORDER BY name WHILE (1 = 1) BEGIN SET @dbname = NULL SELECT TOP 1 @dbname = name FROM #temp_db ORDER BY name IF @dbname IS NULL GOTO _NEXT SET @sql = ' USE [' + @dbname + '] TRUNCATE TABLE #temp_sfs INSERT INTO #temp_sfs EXECUTE(''DBCC SHOWFILESTATS'') INSERT INTO #DBSTATS (dbname, lname, usage, [size], [used]) SELECT db_name(), name, ''Data'' , totalextents * 64.0 / 1024.0 , usedextents * 64.0 / 1024.0 FROM #temp_sfs INSERT INTO #DBSTATS (dbname, lname, usage, [size], [used]) SELECT db_name(), name, ''Log'', null, null FROM sysfiles WHERE status & 0x40 = 0x40' EXEC(@sql) DELETE FROM #temp_db WHERE name = @dbname END _NEXT: INSERT INTO #Temp_Log EXECUTE ('DBCC SQLPERF(LOGSPACE)') --select * from #Temp_Log UPDATE #DBSTATS SET SIZE = B.LogSize , USED = LogSize * LogSpaceUsed / 100 FROM #DBSTATS A INNER JOIN #Temp_Log B ON (A.DBNAME = B.DBNAME)AND(A.Usage = 'LOG') SELECT dbname AS [database name], lname AS [file name], usage, [size] AS [space allocated (MB)], [size]*1.6 as 'plus 60% (MB)', -- used AS[space used (MB)], -- [size] - used AS [free space (MB)], -- cast(used/[size]*100 AS numeric(9,2)) AS [space used %], cast(100-(used/[size]*100) AS numeric(9,2)) AS [free space %] FROM #DBSTATS ORDER BY [free space %] --dbname, usage DROP TABLE #DBSTATS DROP TABLE #temp_db DROP TABLE #temp_sfs DROP TABLE #temp_log SET NOCOUNT OFF