内存优化数据文件组容器可用空间

Microsoft.SQLServer.Windows.Monitor.Container.FreeSpacePercent (UnitMonitor)

当内存优化数据文件组容器的可用磁盘空间低于“警告阈值”设置(以占内存优化数据文件组容器大小加磁盘可用空间之和的百分比表示)时,监视器将报告警告。当可用空间低于“严重阈值”时,监视器将报告严重警报。

Knowledge Base article:

摘要

当内存优化数据文件组容器的可用磁盘空间低于“警告阈值”设置(以占内存优化数据文件组容器大小加磁盘可用空间之和的百分比表示)时,监视器将报告警告。当可用空间低于“严重阈值”时,监视器将报告严重警报。

内存优化数据文件组容器文件夹通常会随着时间逐渐变大,因为添加到内存优化数据表的数据越来越多。因此,管理员希望进行监视以确保存储位置上有足够的空间供容器文件夹使用。

原因

当配置数据库存储位置的驱动器上的可用磁盘空间过低时,可能会发生失败,并阻止成功处理数据、延迟用户查询或影响共享同一磁盘空间分配的其他应用程序。

分配存储作为持久内存优化表格上的 DML 操作的一部分。你需要将存储配置为持久内存优化表的内存优化数据大小的最多 4 倍。如果你已正确配置存储但可用存储空间仍然不足,可能是因为容器支持的 IOPS 不能满足工作负荷的需要。对容器的一般建议是支持数据生成率的 IOPS 的 3 倍,以便支持数据/差异文件的初始填充以及需要读取源数据/差异文件并将其合并到目标 CFP 中的自动合并操作。

解决方法

可用磁盘空间较低的解决方案取决于根本原因,其必须在问题发生时根据每种情况进行调查。可以采用以下任一种方法来缓解这种状况:

可替代参数

名称

说明

默认值

警报优先级

定义警报优先级。

正常

警报严重性

定义警报严重性。

错误

Azure 最大文件大小(MB)

存储在 Azure BLOB 存储中的数据文件的最大大小。工作流会将此值视为每个文件的最大存储容量。

1048576

严重阈值

如果值低于此阈值,监视器会将状态更改为“严重”。

10

已启用

启用或禁用工作流。

生成警报

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

间隔(秒)

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

900

同步时间

使用 24 小时格式指定的同步时间。可以忽略。

 

超时(秒)

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

300

数据库连接超时(秒)

如果在指定期间无法访问数据库,工作流将失败并注册一个事件。

15

警告阈值

如果值低于此阈值,监视器会将状态更改为“警告”。

20

Element properties:

TargetMicrosoft.SQLServer.Windows.Container
Parent MonitorSystem.Health.PerformanceState
CategoryPerformanceHealth
EnabledFalse
Alert GenerateTrue
Alert SeverityMatchMonitorHealth
Alert PriorityNormal
Alert Auto ResolveTrue
Monitor TypeMicrosoft.SQLServer.Windows.MonitorType.Container.FreeSpacePercent
RemotableTrue
AccessibilityPublic
Alert Message
Windows 上的 MSSQL: 内存优化数据文件组容器的可用空间不足
内存优化数据文件组容器“{0}”仅可使用 {6}\% 的可用空间,该值低于警报的配置阈值。
服务器: {4}
SQL Server 实例: {3}
数据库: {2}
文件组: {1}
容器: {0}
磁盘大小: {5} MB
内存优化数据文件组容器可用空间: {7} MB ({6}\%)
内存优化数据文件组容器大小: {8} MB
RunAsDefault

Source Code:

<UnitMonitor ID="Microsoft.SQLServer.Windows.Monitor.Container.FreeSpacePercent" Accessibility="Public" Enabled="false" Target="SqlDiscW!Microsoft.SQLServer.Windows.Container" ParentMonitorID="Health!System.Health.PerformanceState" Remotable="true" Priority="Normal" TypeID="Microsoft.SQLServer.Windows.MonitorType.Container.FreeSpacePercent" ConfirmDelivery="true">
<Category>PerformanceHealth</Category>
<AlertSettings AlertMessage="Microsoft.SQLServer.Windows.Monitor.Container.FreeSpacePercent.AlertMessage">
<AlertOnState>Error</AlertOnState>
<AutoResolve>true</AutoResolve>
<AlertPriority>Normal</AlertPriority>
<AlertSeverity>MatchMonitorHealth</AlertSeverity>
<AlertParameters>
<AlertParameter1>$Target/Host/Host/Host/Property[Type="SqlCoreLib!Microsoft.SQLServer.Core.DBEngine"]/MachineName$</AlertParameter1>
<AlertParameter2>$Target/Host/Host/Host/Property[Type="SqlCoreLib!Microsoft.SQLServer.Core.DBEngine"]/InstanceName$</AlertParameter2>
<AlertParameter3>$Target/Property[Type="SqlCoreLib!Microsoft.SQLServer.Core.File"]/FileName$</AlertParameter3>
<AlertParameter4>$Target/Host/Property[Type="SqlCoreLib!Microsoft.SQLServer.Core.Filegroup"]/GroupName$</AlertParameter4>
<AlertParameter5>$Target/Host/Host/Property[Type="SqlCoreLib!Microsoft.SQLServer.Core.Database"]/DatabaseName$</AlertParameter5>
<AlertParameter6>$Data/Context/Property[@Name='DiskTotalSizeMB']$</AlertParameter6>
<AlertParameter7>$Data/Context/Property[@Name='FreeSpacePercent']$</AlertParameter7>
<AlertParameter8>$Data/Context/Property[@Name='FreeSpaceMB']$</AlertParameter8>
<AlertParameter9>$Data/Context/Property[@Name='AllocatedSizeMB']$</AlertParameter9>
</AlertParameters>
</AlertSettings>
<OperationalStates>
<OperationalState ID="Critical" MonitorTypeStateID="ContainerFreeSpaceCritical" HealthState="Error"/>
<OperationalState ID="Warning" MonitorTypeStateID="ContainerFreeSpaceWarning" HealthState="Warning"/>
<OperationalState ID="Success" MonitorTypeStateID="ContainerFreeSpaceSuccess" HealthState="Success"/>
</OperationalStates>
<Configuration>
<MachineName>$Target/Host/Host/Host/Property[Type="SqlCoreLib!Microsoft.SQLServer.Core.DBEngine"]/MachineName$</MachineName>
<NetbiosComputerName>$Target/Host/Host/Host/Property[Type="SqlCoreLib!Microsoft.SQLServer.Core.DBEngine"]/NetbiosComputerName$</NetbiosComputerName>
<InstanceName>$Target/Host/Host/Host/Property[Type="SqlCoreLib!Microsoft.SQLServer.Core.DBEngine"]/InstanceName$</InstanceName>
<DatabaseName>$Target/Host/Host/Property[Type="SqlCoreLib!Microsoft.SQLServer.Core.Database"]/DatabaseName$</DatabaseName>
<FileName>$Target/Property[Type="SqlCoreLib!Microsoft.SQLServer.Core.File"]/FileName$</FileName>
<AzureMaxFileSizeMB>1048576</AzureMaxFileSizeMB>
<CriticalThreshold>10</CriticalThreshold>
<WarningThreshold>20</WarningThreshold>
<ConnectionString>$Target/Host/Host/Host/Property[Type="SqlCoreLib!Microsoft.SQLServer.Core.DBEngine"]/ConnectionString$</ConnectionString>
<InstanceVersion>$Target/Host/Host/Host/Property[Type="SqlCoreLib!Microsoft.SQLServer.Core.DBEngine"]/Version$</InstanceVersion>
<InstanceEdition>$Target/Host/Host/Host/Property[Type="SqlCoreLib!Microsoft.SQLServer.Core.DBEngine"]/Edition$</InstanceEdition>
<MonitoringType>$Target/Host/Host/Host/Property[Type="SqlDiscW!Microsoft.SQLServer.Windows.DBEngine"]/MonitoringType$</MonitoringType>
<SqlExecTimeoutSeconds>60</SqlExecTimeoutSeconds>
<SqlTimeoutSeconds>15</SqlTimeoutSeconds>
<TimeoutSeconds>300</TimeoutSeconds>
<IntervalSeconds>900</IntervalSeconds>
<SyncTime/>
</Configuration>
</UnitMonitor>