SQL Server 默认跟踪应用4 -- 检测日志文件自动增长

用户抱怨SQL Server数据库运行非常慢。通过默认跟踪的这个查询,可以识别出log file autogrow活动导致的长时间运行。为什么如此之慢?

 

SELECT te.name AS [trace_events_name] ,
t.DatabaseName ,
t.NTDomainName ,
t.ApplicationName ,
t.LoginName ,
t.Duration ,
t.StartTime ,
t.EndTime
FROM sys.fn_trace_gettable(CONVERT(VARCHAR(150), ( SELECT TOP 1
f.value FROM sys.fn_trace_getinfo(NULL) f WHERE f.property = 2 )), DEFAULT) T
JOIN sys.trace_events TE ON T.EventClass = TE.trace_event_id
WHERE te.trace_event_id = 93
AND t.StartTime BETWEEN '2012-04-17 13:00:00.000' AND '2012-04-17 15:00:00.000'

 

clip_p_w_picpath001

 

有些因素导致log file autogrow性能较差,例如:

1) 如果一个大型事务导致日志增长,SQL事务需要等待日志自动增长完成。该事务需要写入SQL Server事务日志文件。通常,我们会在SQL错误日志中看到一条信息。

2) 自动增长和自动收缩可能在SQL Server数据库上导致冲突。

3) 衡量在SQL事务日志文件上的物理碎片。

4) 文件立刻初始化(Instant file initialization)只与数据文件有关。将不会有利日志文件增长。

5) 最小化事务的大小。正常提交有助于维护更小的日志文件。

6) 跟进存储性能。收集Perfmon性能计数器信息,例如:Logical Write Bytes/sec和Logical Read Bytes/sec。