This commit is contained in:
Thierry Schork
2025-09-16 08:26:19 +02:00
parent b0e4d245eb
commit de97031b1e
5 changed files with 317 additions and 4 deletions

View File

@@ -40,6 +40,8 @@ WHERE type IN (0,1);';
SELECT *
FROM #FileSize
*/
--the free space in MB that should be present in the files after shrinking
DECLARE @limit INT = 512;
SELECT
d.[name] AS dbName
@@ -65,18 +67,20 @@ GO
' AS reorganizeData
,'USE '+d.name+';
IF 1024 < '+CAST(CAST(f.size * 8.0 / 1024 AS DECIMAL(18,2)) AS VARCHAR(15))+' --file is above 1Go
AND 95 > '+CAST(CAST((fs.[CurrentSizeMB] - fs.[FreeSpaceMB]) * 100 / (CAST(f.size * 8.0 / 1024 AS DECIMAL(18,2))) AS DECIMAL(6,2))AS VARCHAR(15))+' --and usage below 95%
IF '+CAST(@limit AS VARCHAR(20))+' < '+CAST(CAST(f.size * 8.0 / 1024 AS DECIMAL(18,2)) AS VARCHAR(15))+' --file is above requested free space
--AND 95 > '+CAST(CAST((fs.[CurrentSizeMB] - fs.[FreeSpaceMB]) * 100 / (CAST(f.size * 8.0 / 1024 AS DECIMAL(18,2))) AS DECIMAL(6,2))AS VARCHAR(15))+' --and usage below 95%
AND '+CAST(fs.[FreeSpaceMB] AS VARCHAR(20))+' > '+CAST(@limit AS VARCHAR(20))+' --free space is over the requested limit
AND 0 < '+CAST(CAST(fs.[CurrentSizeMB] - fs.[FreeSpaceMB] AS DECIMAL(18,2))AS VARCHAR(15))+' --and data are present
BEGIN
--print ''Reorganize '+d.name+'.'+f.name+' ''
RAISERROR(''Reorganize '+d.name+'.'+f.name+' '',0,0) WITH NOWAIT
DBCC SHRINKFILE (N'''+f.[name]+''' , '+CAST(CAST(fs.[CurrentSizeMB] - fs.[FreeSpaceMB] + 1024 AS DECIMAL(18,0)) AS VARCHAR(15))+');
DBCC SHRINKFILE (N'''+f.[name]+''' , '+CAST(CAST(fs.[CurrentSizeMB] - fs.[FreeSpaceMB] + @limit AS DECIMAL(18,0)) AS VARCHAR(15))+');
RAISERROR(''Done'',0,0) WITH NOWAIT
END
GO
' AS auto_action
--,fs.[CurrentSizeMB] - fs.[FreeSpaceMB] AS unused_space_mb
FROM sys.master_files F
JOIN sys.databases d ON d.[database_id] = f.[database_id]
JOIN [#dbs] [d2] ON d2.[database_name] = d.[name]