Welke database files gegroeid op basis van default trace

De default trace binnen SQL Server is een erg krachtige informatie bron, waar relatief snel veel informatie uit opgevraagd kan worden. In dit voorbeeld wordt uitgelegd gekeken welke database files gegroeid zijn op basis van informatie uit de default trace.

Default trace event

Indien auto growth enabled staat op je database files, zal bij iedere growth actie er een event weggeschreven worden in je default trace. Op basis van de huidige growth size van de database file en het aantal keer dat een growth event is voorgekomen, wordt berekend hoeveel de database file is gegroeid.


SELECT CONVERT(VARCHAR(10), tr.StartTime, 112) AS date
 , tr.DatabaseName
 , tr.filename
 , te.name AS eventName
 , (smf.size*8)/1024 AS fileSizeMB
 , SUM((smf.growth*8)/1024) AS growthSizeMB
FROM sys.fn_trace_gettable(CONVERT(VARCHAR(150), (SELECT value FROM sys.fn_trace_getinfo(NULL) WHERE traceid = 1 AND property = 2)), DEFAULT) tr
 INNER JOIN sys.trace_events te
 ON tr.EventClass = te.trace_event_id
 INNER JOIN master.sys.master_files AS smf
 ON tr.filename = smf.name
WHERE te.name LIKE '%Grow%'
GROUP BY tr.DatabaseName, tr.filename, te.name, CONVERT(VARCHAR(10), tr.StartTime, 112), smf.size
ORDER BY 1 DESC,2,3

Onnauwkeurigheden

De informatie die je via bovenstaande query opvraagt is niet 100% betrouwbaar. Er zijn namelijk een aantal zaken waar rekening mee moet worden gehouden.

  • Als in de tussentijd de growth size is aangepast, wordt er gerekend met een verkeerde hoeveelheid.
  • De default trace wordt gereset na iedere herstart van SQL.

Mogelijk zijn er nog meerdere situaties waarin dit niet volledig goed wordt weergegeven, maar het geeft je tenminste een goede indicatie van welke database files recent gegroeid zijn.