如何在SQL Server数据库上发生自动增长时获得警报?

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

我希望能够报告1MB设置发生这种活动的频率。

作为你的进一步的弹药,结帐这篇博客文章,我讨论了数据文件的自动增长: 数据文件大小pipe理的重要性 。

日志文件自动增长在SQL日志或应用程序事件日志中报告。 您还可以使用SQL Trace或SQL Profiler等事件来监视SQL事件。 这是一个讨论监视SQL事件的MSDN文章。

编辑:在应用程序事件日志中查找自动增长取消事件的事件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实例的名称。 更多信息在这里 。 您需要为您的环境设置此服务。

它只是一直启用,你不能禁用SQL日志logging。 如果你没有看到autogrowth事件,那么在你的日志所涵盖的时间范围内,你几乎没有发生过任何事情。 请参阅编辑我的答案,您可以使用SQL查找SQL日志中的自动增长。

这取决于你在说什么。

根据我的经验,SQL Server没有按照build议将自动增长logging到ERRORLOG ,而是logging在默认跟踪中,并且可以禁用和启用默认跟踪。

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

 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 

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

您可以find当前跟踪的path,如下所示:

 SELECT path FROM sys.traces WHERE is_default = 1; 

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