11 March 2025

MSSQL - Database Growth - Crescita DB

---------------------------------------
-- PARAMETRI
---------------------------------------
DECLARE @DB NVARCHAR(100) = 'GVDOC'
---------------------------------------


-- https://peter-whyte.com/2018/05/get-database-growth-events-sql-server/

DECLARE @filename NVARCHAR(1000);
DECLARE @bc INT;
DECLARE @ec INT;
DECLARE @bfn VARCHAR(1000);
DECLARE @efn VARCHAR(10);

-- Get the name of the current default trace 
SELECT @filename = CAST(value AS NVARCHAR(1000))
FROM::fn_trace_getinfo(DEFAULT)
WHERE traceid = 1
	AND property = 2;

-- rip apart file name into pieces 
SET @filename = REVERSE(@filename);
SET @bc = CHARINDEX('.', @filename);
SET @ec = CHARINDEX('_', @filename) + 1;
SET @efn = REVERSE(SUBSTRING(@filename, 1, @bc));
SET @bfn = REVERSE(SUBSTRING(@filename, @ec, LEN(@filename)));
-- set filename without rollover number 
SET @filename = @bfn + @efn


-- process all trace files 
;WITH BOSO AS
(
    SELECT ftg.StartTime
	    , te.name AS EventName
	    , DB_NAME(ftg.databaseid) AS DatabaseName
	    , ftg.Filename
	    , (ftg.IntegerData * 8) / 1024.0 AS GrowthMB
	    , (ftg.duration / 1000) AS DurMS
    FROM::fn_trace_gettable(@filename, DEFAULT) AS ftg
    INNER JOIN sys.trace_events AS te ON ftg.EventClass = te.trace_event_id
    WHERE (
		    ftg.EventClass = 92 -- Date File Auto-grow     
		    OR ftg.EventClass = 93
		    ) -- Log File Auto-grow 
    AND DatabaseName = @DB

)
, TOTALI AS
(
    SELECT    X.DatabaseName
            , CONVERT(DATE, X.StartTime) AS GIORNO
            , COUNT(*) AS CONTA
            , SUM(X.GrowthMB) AS MB
            , SUM(X.DurMS) MSeconds
    FROM    BOSO X
    GROUP BY X.DatabaseName, CONVERT(DATE, X.StartTime) 
)
SELECT  *
FROM    TOTALI T
ORDER BY T.GIORNO