当 SQL Server 数据库出现自动增长时,如何收到警报?

当 SQL Server 数据库出现自动增长时,如何收到警报?

我们的 SharePoint 数据库默认设置为 1MB 的自动增长(毫无意义),我需要“说服”我们的应用程序所有者这是错误的。有没有办法监控 SQL Server 的自动增长活动?

我希望能够报告在 1MB 设置下发生此活动的频率。

答案1

作为对您的进一步补充,请查看我撰写的这篇博客文章,其中讨论了数据文件自动增长:数据文件大小管理的重要性

答案2

日志文件自动增长会在 SQL 日志或应用程序事件日志中报告。您还可以使用 SQL Trace 或 SQL Profiler 等工具来监视 SQL 事件。这里有一篇 MSDN 文章,讨论了监控 SQL 事件

编辑:在应用程序事件日志中查找事件 ID 5144(表示自动增长取消事件)和 5145(表示成功/完成的自动增长事件)。

编辑2:要在 SQL 日志中查找数据库日志文件 auogrowth 事件,您可以使用以下命令:

EXEC xp_readerrorlog 0,1,'autogrow'

增加 0 以便让 xp_readerrorlog 使用存档的错误日志文件。0 到 (n-1),其中 n 是您拥有的错误日志文件的数量。

您还可以为自动增长事件设置事件通知。如下所示:

CREATE EVENT NOTIFICATION data_file_autogrow_notifier
ON DATABASE
FOR DATA_FILE_AUTO_GROW
TO SERVICE 'NotifyAutogrow', 'current database' ;

或者对于日志文件:

CREATE EVENT NOTIFICATION log_file_autogrow_notifier
ON DATABASE
FOR LOG_FILE_AUTO_GROW
TO SERVICE 'NotifyAutogrow', 'current database' ;

其中 NotifyAutogrow 是 Service Broker 实例的名称。更多信息这里。您需要为您的环境设置此服务。

答案3

它只是始终启用,您无法禁用 SQL 日志记录。如果您没有看到自动增长事件,那么很有可能在您的日志涵盖的时间范围内没有发生任何事件。请参阅对我的答案的编辑,了解您可以用来在 SQL 日志中查找自动增长的 SQL。

这取决于你在谈论什么。

根据我的经验,SQL Server 并没有ERRORLOG像建议的那样记录自动增长,而是记录在默认跟踪中,并且可以禁用和启用默认跟踪。

要检查它是否已启用,请参见:

select name, value_in_use
from sys.configurations
where name='default trace enabled'

如果它被禁用,您可以启用它:

sp_configure 'default trace enabled', 1
go

之后别忘了跑步RECONFIGURE

要检查autogrow事件,您可以使用:

SELECT databaseid, filename, SUM(IntegerData*8) AS Growth, Duration, StartTime
FROM ::fn_trace_gettable('C:\SQL Server\MSSQL10_50.INSTANCENAME\MSSQL\Log\log_4.trc', default)
WHERE EventClass = 92 OR EventClass = 93
GROUP BY databaseid, filename, IntegerData, Duration, StartTime

其中参数 tofn_trace_gettable是当前(或存档)跟踪的名称。

您可以按照如下方式找到当前跟踪的路径:

SELECT path FROM sys.traces WHERE is_default = 1;

答案4

日志文件自动增长会在 SQL 日志或应用程序事件日志中报告。您还可以使用 SQL Trace 或 SQL Profiler 等工具来监视 SQL 事件。

相关内容