我们的 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 事件。