Identificar eventos de crecimiento de archivos


9

Estoy descubriendo una serie de bases de datos en mi cartera que se han creado con la configuración predeterminada de crecimiento automático (ya sea 1 MB o incrementos del 10%) que se han expandido durante un período prolongado de tiempo. Si quisiera obtener un indicador de la cantidad de fragmentación externa para cada uno de los archivos de base de datos, ¿puedo obtener de los metadatos cuántas veces se ha modificado el tamaño de un archivo de base de datos (ya sea por crecimiento automático o manual)? Para aclarar, ¿puedo obtener de los metadatos el historial de modificaciones del archivo DB durante la vida útil del DB, no solo desde el reinicio de la instancia?


1
A menos que también se hayan reducido en algún momento, ¿esto debería ser un cálculo simple del tamaño inicial al tamaño actual basado en la configuración de crecimiento automático?
Martin Smith

Si solo fue modificado por crecimiento automático, estaría de acuerdo, pero he visto modificaciones manuales que pueden estar fuera de la configuración de crecimiento automático.
MattyZDBA

Respuestas:


20

Puede obtener información de eventos de crecimiento automático de la traza predeterminada si está habilitada:

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%';

Puede ver a partir de esto que el rastreo predeterminado tiene la captura de eventos de crecimiento automático del archivo de datos y crecimiento automático del archivo de registro . Para ver si tiene habilitado el rastreo predeterminado en esa instancia, puede hacer lo siguiente:

exec sp_configure 'default trace enabled';
go

Nota: esta es una opción de configuración avanzada, por show advanced optionslo que tendría que configurarla en 1 para ver esta opción de configuración sp_configure. Además, estos dos eventos no se activarán si el archivo creció manualmente .

Aquí hay una consulta de muestra rápida para obtener estos eventos:

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;

Y puede obtener <Trace Path>de la función del sistema sys.fn_trace_getinfo:

select *
from sys.fn_trace_getinfo(1);

Esta es una buena información, solo tenga en cuenta que algunos de esos eventos podrían haber expirado de la traza predeterminada.
Nic

Absolutamente, pero creo que es el único monitoreo listo para usar que el OP realizará con la auditoría adecuada.
Thomas Stringer
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.