总内存限制配置

Microsoft.SQLServer.2016.AnalysisServices.UnitMonitor.Instance.TotalMemoryConfiguration (UnitMonitor)

当 SSAS 实例的配置的“总内存限制”超过配置的阈值,导致操作系统执行其必需的基本功能所需的物理内存(至少 2 GB)分配存在风险时,监视器将发出警报。

Knowledge Base article:

摘要

当 SSAS 实例配置的“总内存限制”超过配置的阈值,导致操作系统运行其必需的基本功能所需的物理内存分配存在风险时,监视器将发出警报。此外,该配置未考虑除特定的被监视实例之外的其他进程可能占用的内存,而管理员在全面查看 SSAS 多维性能指南之后,在调整“总内存限制”设置时也必须考虑这一因素。

原因

“总内存限制”必须为操作系统保留执行内存管理以及驱动器和硬盘交互的基本功能所需的足够空间。如果操作系统执行这些基本功能所需的可用内存不足,系统可能会不稳定或失败。因此设置必须配置为略低于 100%,以确保这些功能有足够的可用物理内存。如果设置得太高,此监视器将发出注意此状况的警报。

SSAS 的默认“总内存限制”配置为 80,表示服务器上有 80% 的可用物理内存。如果有其他占用较多内存的进程(例如 SQL Server 关系数据库引擎),则应考虑此因素,并应相应减少内存限制设置。如果此数值上升得过高,则操作系统的物理内存可能不足,同时会生成大量的磁盘分页,导致服务器性能不足。

如果需要特定字节数,任何大于 100 的值将解释为物理内存的字节数。

注意: 与支持硬内存上限的 SQL Server 关系数据库引擎不同,SSAS 引擎“总内存限制”的工作方式略有不同。“总内存限制”是服务器开始主动尝试尽快清除内存的限制。同样,“低内存限制”是服务器开始“懒散地”尝试从 SSAS 缓存清除内存,并尝试减少对已在进行的任何现有会话或查询的影响的限制。达到“总内存限制”时,服务器性能可能会受影响,因为服务器会非常主动地从缓存中清除内存。服务器还支持“硬内存限制”设置,该设置为服务器开始任意终止会话以尝试释放内存的点。这可能会导致部分用户失败,也是未强制将“总内存限制”作为硬限制的原因,因为部分查询或作业本质上将占用大量内存,而 OLAP 引擎会尽力在其配置支持的限制范围内为他们服务。

解决方法

可以通过以下操作来解决此状况:

外部

Memory configuration and sizing considerations in SQL Server 2016(SQL Server 2016 中的内存配置和调整大小考虑事项)

针对 Analysis Services 内存属性的 TechNet 文档

在 Analysis Services 中配置服务器属性

针对 SSAS 性能计数器的 TechNet 文档

SSAS 多维性能指南

可替代参数

名称

说明

默认值

已启用

启用或禁用工作流

生成警报

定义工作流是否生成警报

间隔(秒)

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

604800

同步时间

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

 

警告阈值(GB)

当操作系统的配置的“总内存限制”超过配置的阈值,导致操作系统执行其必需的基本功能所需的物理内存(至少 2 GB)分配存在风险时,监视器将发出警报。

2

超时(秒)

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

300

Element properties:

TargetMicrosoft.SQLServer.2016.AnalysisServices.Instance
Parent MonitorSystem.Health.ConfigurationState
CategoryConfigurationHealth
EnabledTrue
Alert GenerateTrue
Alert SeverityWarning
Alert PriorityNormal
Alert Auto ResolveTrue
Monitor TypeMicrosoft.SQLServer.2016.AnalysisServices.MonitorType.Instance.TotalMemoryConfiguration
RemotableTrue
AccessibilityPublic
Alert Message
SSAS 2016: “总内存限制”配置无效
当 SSAS 实例的配置的“总内存限制”({0} GB)超过了必需的操作系统功能所需的配置阈值,可能会导致系统不稳定或失败。
服务器上的总内存: {2} GB
总内存使用率: {5} GB
非 SSAS 进程使用的内存: {4} GB
SSAS 使用的内存: {3} GB
SSAS 内存下限: {6} GB ({7}\%)
SSAS 内存上限: {0} GB ({8}\%)
RunAsDefault

Source Code:

<UnitMonitor ID="Microsoft.SQLServer.2016.AnalysisServices.UnitMonitor.Instance.TotalMemoryConfiguration" Accessibility="Public" Enabled="true" Target="SQLAS!Microsoft.SQLServer.2016.AnalysisServices.Instance" ParentMonitorID="SystemHealth!System.Health.ConfigurationState" Remotable="true" Priority="Normal" TypeID="Microsoft.SQLServer.2016.AnalysisServices.MonitorType.Instance.TotalMemoryConfiguration" ConfirmDelivery="false">
<Category>ConfigurationHealth</Category>
<AlertSettings AlertMessage="Microsoft.SQLServer.2016.AnalysisServices.UnitMonitor.Instance.TotalMemoryConfiguration.AlertMessage">
<AlertOnState>Warning</AlertOnState>
<AutoResolve>true</AutoResolve>
<AlertPriority>Normal</AlertPriority>
<AlertSeverity>Warning</AlertSeverity>
<AlertParameters>
<AlertParameter1>$Data/Context/Property[@Name='MemoryLimitHighGB']$</AlertParameter1>
<AlertParameter2>$Data/Context/Property[@Name='MemoryLeavesForOsGB']$</AlertParameter2>
<AlertParameter3>$Data/Context/Property[@Name='TotalPhysicalMemoryGB']$</AlertParameter3>
<AlertParameter4>$Data/Context/Property[@Name='MemoryUsageGB']$</AlertParameter4>
<AlertParameter5>$Data/Context/Property[@Name='MemoryUsageByOtherProcessGB']$</AlertParameter5>
<AlertParameter6>$Data/Context/Property[@Name='UsedPhysicalMemoryGB']$</AlertParameter6>
<AlertParameter7>$Data/Context/Property[@Name='MemoryLimitLowGB']$</AlertParameter7>
<AlertParameter8>$Data/Context/Property[@Name='MemoryLimitLowPercent']$</AlertParameter8>
<AlertParameter9>$Data/Context/Property[@Name='MemoryLimitHighPercent']$</AlertParameter9>
</AlertParameters>
</AlertSettings>
<OperationalStates>
<OperationalState ID="Warning" MonitorTypeStateID="NotConfigured" HealthState="Warning"/>
<OperationalState ID="Success" MonitorTypeStateID="Configured" HealthState="Success"/>
</OperationalStates>
<Configuration>
<Threshold>2</Threshold>
<IntervalSeconds>604800</IntervalSeconds>
<SyncTime/>
<TimeoutSeconds>300</TimeoutSeconds>
</Configuration>
</UnitMonitor>