自动收缩配置

Microsoft.SQLServer.2008.Database.Configuration.AutoShrink (UnitMonitor)

监视数据库的自动收缩设置

Knowledge Base article:

摘要

此监视器检查此数据库的“自动收缩”设置。因为此监视器是整体标准要求的一部分,如果该设置不符合指定的标准,将生成警报。

配置

当“自动收缩”统计信息设置为 ON 时,数据库文件可作为定期收缩的候选对象。数据文件和日志文件都可以自动收缩。只有在数据库设置为 SIMPLE 恢复模式时或事务日志已备份时,“自动收缩”才能减小事务日志的大小。当设置为 OFF 时,在定期检查未使用空间的过程中,数据库文件不自动收缩。当文件中超过百分之二十五的部分包含未使用的空间时,AUTO_SHRINK 选项将导致收缩文件。文件将收缩至未使用空间占文件 25% 的大小,或收缩至文件创建时的大小,以两者中较大者为准。不能收缩只读数据库。

自动收缩可能导致过多的索引碎片、事务日志大小和 I/O。只有在收缩操作后数据库不可能再次增长并且您可以执行 ALTER INDEX … REORGANIZE 的情况下才使用自动收缩。

AUTO_SHRINK {ON | OFF}

原因

如果该选项与所需的设置不匹配,将生成一个警告警报。在初始状态下,监视器配置为在此设置为 "ON" 时发出警报。

解决方法

可以通过以下任一方法解决此问题:

或者,如果对于此数据库无需考虑此监视器:

外部

请参阅有关此设置的详细信息: ALTER DATABASE SET 选项(Transact-SQL)

可替代参数

名称

说明

默认值

警报优先级

定义警报优先级。

正常

警报严重性

定义警报严重性。

警告

禁用对 SQL Express 的检查

启用或禁用对 SQL Express 版本的检查。

已启用

启用或禁用工作流。

预期值

若要查看可能的值的集合,请参阅有关此监视器的知识的“配置”部分。

生成警报

定义工作流是否生成警报。

间隔(秒)

运行工作流的重复间隔时间(秒)。

43200

超时(秒)

指定允许工作流在被关闭并标记为失败之前运行的时间。

300

Element properties:

TargetMicrosoft.SQLServer.2008.Database
Parent MonitorMicrosoft.SQLServer.2008.Database.AutomaticConfiguration
CategoryConfigurationHealth
EnabledFalse
Alert GenerateTrue
Alert SeverityWarning
Alert PriorityNormal
Alert Auto ResolveTrue
Monitor TypeMicrosoft.SQLServer.2008.DBConfigurationStatus
RemotableTrue
AccessibilityPublic
Alert Message
自动收缩配置错误
未根据最佳实践设置计算机“{2}”上 SQL 实例“{1}”中的数据库“{0}”的自动收缩设置。
RunAsDefault

Source Code:

<UnitMonitor ID="Microsoft.SQLServer.2008.Database.Configuration.AutoShrink" Accessibility="Public" Enabled="false" Target="SQL2008Core!Microsoft.SQLServer.2008.Database" ParentMonitorID="Microsoft.SQLServer.2008.Database.AutomaticConfiguration" Remotable="true" Priority="Normal" TypeID="Microsoft.SQLServer.2008.DBConfigurationStatus" ConfirmDelivery="false">
<Category>ConfigurationHealth</Category>
<AlertSettings AlertMessage="Microsoft.SQLServer.2008.Database.Configuration.AutoShrink.AlertMessage">
<AlertOnState>Warning</AlertOnState>
<AutoResolve>true</AutoResolve>
<AlertPriority>Normal</AlertPriority>
<AlertSeverity>Warning</AlertSeverity>
<AlertParameters>
<AlertParameter1>$Target/Property[Type="SQL!Microsoft.SQLServer.Database"]/DatabaseName$</AlertParameter1>
<AlertParameter2>$Target/Host/Property[Type="SQL!Microsoft.SQLServer.ServerRole"]/InstanceName$</AlertParameter2>
<AlertParameter3>$Target/Host/Host/Property[Type="Windows!Microsoft.Windows.Computer"]/NetworkName$</AlertParameter3>
</AlertParameters>
</AlertSettings>
<OperationalStates>
<OperationalState ID="ConfigurationValueOK" MonitorTypeStateID="ConfigurationValueOK" HealthState="Success"/>
<OperationalState ID="ConfigurationValueNotOK" MonitorTypeStateID="ConfigurationValueNotOK" HealthState="Warning"/>
</OperationalStates>
<Configuration>
<ConnectionString>$Target/Host/Property[Type="SQL!Microsoft.SQLServer.DBEngine"]/ConnectionString$</ConnectionString>
<DatabaseName>$Target/Property[Type="SQL!Microsoft.SQLServer.Database"]/DatabaseName$</DatabaseName>
<IntervalSeconds>43200</IntervalSeconds>
<SyncTime/>
<ConfigValue>AutoShrink</ConfigValue>
<ExpectedValue>OFF</ExpectedValue>
<ExcludeOnExpress>false</ExcludeOnExpress>
<SQLSKU>$Target/Host/Property[Type="SQL!Microsoft.SQLServer.DBEngine"]/Edition$</SQLSKU>
<TimeoutSeconds>300</TimeoutSeconds>
</Configuration>
</UnitMonitor>