是什么导致数据库 [.mdf 文件] 突然增长

Beg*_*DBA 3 sql-server auto-growth sql-server-2014

我试图找到导致数据库的 mdf 从 20 GB 膨胀到 100 GB 的原因。

到目前为止,我尝试检查自动增长事件以找到时间,但使用标准报告甚至默认跟踪文件都找不到。

我们没有 3rd 方监控工具来确认是否有任何维护工作(如重建)或任何其他过程。

我怎样才能找到导致这个 mdf 增长的原因?

Aar*_*and 6

这将从我的回答中找到所有错误日志文件中的所有自动增长活动仍处于活动序列中:

DECLARE @path NVARCHAR(260);

SELECT 
   @path = REVERSE(SUBSTRING(REVERSE([path]), 
   CHARINDEX(CHAR(92), REVERSE([path])), 260)) + N'log.trc'
FROM    sys.traces
WHERE   is_default = 1;

SELECT 
   DatabaseName,
   HostName,
   ApplicationName,
   [FileName],
   SPID,
   Duration,
   StartTime,
   EndTime,
   FileType = CASE EventClass WHEN 92 THEN 'Data' ELSE 'Log' END
FROM sys.fn_trace_gettable(@path, DEFAULT)
WHERE EventClass IN (92,93)
-- AND DatabaseName = N'AdventureWorks'
ORDER BY StartTime DESC;
Run Code Online (Sandbox Code Playgroud)

现在,一旦您确定了可疑的自动增长事件,您就可以看到导致该事件的应用程序名称和主机名等信息。这是可能的,你可能由同一SPID捕捉其他活动,但你不能靠这个。只需查看在任意窗口内开始或结束的事情 - 这会查看 5 分钟前和 5 分钟后,并对上面观察到的 SPID 进行硬编码:

SELECT * FROM sys.fn_trace_gettable(@path, DEFAULT)
  WHERE StartTime >= DATEADD(MINUTE, -5, '2018-03-19 11:41:16.970')
    AND EndTime   <  DATEADD(MINUTE,  5, '2018-03-19 11:41:16.970')
    -- AND TextData IS NOT NULL
    AND SPID = 63;
Run Code Online (Sandbox Code Playgroud)

如果您每天滚动浏览 20 个错误日志文件,则说明某些内容未正确配置,或者您执行的内容过多,导致这些日志文件充满噪音。恕我直言。