Identifier les événements de croissance de fichiers

9

Je découvre un certain nombre de bases de données dans mon portefeuille qui ont été créées avec des paramètres de croissance automatique par défaut (soit 1 Mo ou incréments de 10%) qui se sont développées pendant une période de temps prolongée. Si je voulais obtenir une estimation de la quantité de fragmentation externe pour chacun des fichiers de base de données, puis-je obtenir des métadonnées combien de fois la taille d'un fichier de base de données a été modifiée (par croissance automatique ou manuellement)? Pour clarifier, puis-je obtenir des métadonnées l'historique des modifications de fichiers DB pour la durée de vie de la base de données, pas seulement depuis le redémarrage de l'instance?

MattyZDBA
la source
1
À moins qu'ils aient également été réduits à un moment donné, cela devrait être un simple calcul de la taille initiale à la taille actuelle en fonction du paramètre de croissance automatique?
Martin Smith
S'il n'a été modifié que par la croissance automatique, je serais d'accord, mais j'ai vu des modifications manuelles effectuées qui peuvent être en dehors des paramètres de la croissance automatique.
MattyZDBA

Réponses:

20

Vous pouvez obtenir des informations sur les événements de croissance automatique à partir de la trace par défaut si elle est activée:

select distinct
    ei.eventid,
    e.name
from sys.fn_trace_geteventinfo(1) ei
inner join sys.trace_events e
on e.trace_event_id = ei.eventid
where name like '%grow%';

Vous pouvez voir à partir de cela que la trace par défaut a la capture d'événements Auto Data Grow et Log File Auto Grow . Pour voir si la trace par défaut est activée sur cette instance, vous pouvez effectuer les opérations suivantes:

exec sp_configure 'default trace enabled';
go

Remarque: il s'agit d'une option de configuration avancée, vous show advanced optionsdevez donc définir la valeur 1 pour afficher cette option de configuration sp_configure. En outre, ces deux événements ne seront pas déclenchés si le fichier a augmenté manuellement .

Voici un exemple de requête rapide pour obtenir ces événements:

select
    te.name as event_name,
    tr.DatabaseName,
    tr.FileName,
    tr.StartTime,
    tr.EndTime
from sys.fn_trace_gettable('<Trace Path>', 0) tr
inner join sys.trace_events te
on tr.EventClass = te.trace_event_id
where tr.EventClass in (92, 93)
order by EndTime;

Et vous pouvez obtenir <Trace Path>de la fonction système sys.fn_trace_getinfo:

select *
from sys.fn_trace_getinfo(1);
Thomas Stringer
la source
Il s'agit de bonnes informations, gardez à l'esprit que certains de ces événements pourraient bien avoir expiré à partir de la trace par défaut.
Nic
Absolument, mais je pense que c'est la seule surveillance prête à l'emploi que le PO obtiendra à ce sujet en effectuant réellement l'audit approprié.
Thomas Stringer