我正在使用事件通知来捕获我服务器上所有数据库的数据和日志文件自动增长事件。我正在使用这些数据来分析数据库存储配置。
在查看数据时,我注意到事务日志增长的平均持续时间远高于我的预期,这让我认为我要么误解了数据,要么忽略了与事务日志自动增长的工作原理相关的一些事情。
这是今天捕获的日志文件增长事件的示例:
<EVENT_INSTANCE>
<EventType>LOG_FILE_AUTO_GROW</EventType>
<PostTime>2013-08-29T11:14:26.447</PostTime>
<SPID>97</SPID>
<DatabaseID>32</DatabaseID>
<NTDomainName />
<HostName>[cleansed]</HostName>
<ClientProcessID>4884</ClientProcessID>
<ApplicationName>.Net SqlClient Data Provider</ApplicationName>
<LoginName>[cleansed]</LoginName>
<Duration>4173000</Duration>
<StartTime>2013-08-29T11:14:22.263</StartTime>
<EndTime>2013-08-29T11:14:26.437</EndTime>
<IntegerData>64000</IntegerData>
<ServerName>[cleansed]</ServerName>
<DatabaseName>MyDB</DatabaseName>
<FileName>MyDB_log</FileName>
<LoginSid>[cleansed]</LoginSid>
<EventSequence>14637017</EventSequence>
<IsSystem />
<SessionLoginName>[cleansed]</SessionLoginName>
</EVENT_INSTANCE>
由于持续时间以毫秒为单位报告,我正在阅读此文件,因为它需要 69.54 分钟来增加文件。此日志文件的自动增长设置为 512MB(限制为 2TB)
SELECT
growth AS GrowthPages,
growth*8/1000 AS GrowthMB,
max_size,
is_percent_growth
FROM MyDB.sys.database_files
WHERE type=1
GrowthPages GrowthMB max_size is_percent_growth
64000 512 268435456 0
所有数据库都记录到同一个卷,该卷通过光纤通道连接到 SAN。(如果需要,我必须与我们的 SAN 管理员联系以获取有关存储配置的更多详细信息)。
实例是 SQL 2012 Enterprise,服务器是 Windows 2008 R2 Enterprise。
为什么将日志增加 512MB 需要一个多小时?我们没有注意到任何这些数据库的操作延迟(除非我们只是忽略它)。还有一些具有相似持续时间的其他数据库;他们的自动增长设置是相同的。具有较小自动增长设置的其他数据库的持续时间按比例较小。