识别文件增长事件


9

我在我的投资组合中发现了许多数据库,这些数据库是使用默认的自动增长设置(增量为1 MB或10%)创建的,这些设置已经扩展了很长时间。如果我想了解每个数据库文件的外部碎片数量,是否可以从元数据中获取一个数据库文件已被修改(自动增长或手动修改)多少次?为了明确起见,我是否可以从元数据中获得数据库生命周期中数据库文件修改的历史记录,而不仅仅是实例重启之后?


1
除非它们在某个时候也缩小了,否则这应该是基于自动增长设置从初始大小到当前大小的简单计算吗?
马丁·史密斯

如果仅通过自动增长对其进行修改,我会同意,但是我已经看到完成的手动修改可能超出了自动增长设置。
MattyZDBA

Answers:


20

如果启用了默认跟踪,则可以获取自动增长事件信息:

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

从中可以看到,默认跟踪的确捕获了“ 数据文件自动增长”和“ 日志文件自动增长”事件。要查看是否在该实例上启用了默认跟踪,可以执行以下操作:

exec sp_configure 'default trace enabled';
go

注意:这是一个高级配置选项,因此show advanced options必须通过将其设置为1才能查看此配置选项sp_configure。此外,如果文件手动增长,则不会触发这两个事件

这是获取这些事件的快速示例查询:

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;

您可以<Trace Path>从系统功能中获得sys.fn_trace_getinfo

select *
from sys.fn_trace_getinfo(1);

这是个很好的信息,请记住,其中一些事件可能已从默认跟踪中过期。
Nic

绝对可以,但是我相信这是OP可以通过实际进行适当的审核而获得的唯一现成的监视。
Thomas Stringer
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.