当 SSAS 实例的配置的 TotalMemoryLimit 超过配置的阈值,导致操作系统执行必需的基本功能所需的物理内存(至少 2 GB)分配存在风险时,监视器将发出警报。
当 SSAS 实例配置的 TotalMemoryLimit 超过配置的阈值,导致操作系统运行必需的基本功能所需的物理内存分配存在风险时,监视器将发出警报。此外,该配置未考虑除特定的被监视实例之外的其他进程可能占用的内存,而管理员在全面查看 SSAS 多维性能指南之后,在调整 TotalMemoryLimit 设置时也必须考虑这一因素。
TotalMemoryLimit 必须为操作系统保留执行内存管理以及驱动器和硬盘交互的基本必需功能所需的最小的足够空间。如果操作系统执行这些基本功能所需的可用内存不足,系统可能会不稳定或失败。因此设置必须配置为略低于 100%,以确保这些功能有足够的可用物理内存。如果设置得太高,此监视器将发出注意此状况的警报。
SSAS 的默认 TotalMemoryLimit 配置为 80,表示服务器上有 80% 的可用物理内存。如果有其他占用较多内存的进程(例如 SQL Server 关系数据库引擎),则应考虑此因素,并相应减少内存限制设置。如果此数值上升得过高,则操作系统的物理内存可能不足,同时会生成大量的磁盘分页,导致服务器性能不足。
如果需要特定字节数,任何大于 100 的值将解释为物理内存的字节数。
注意: 与支持硬内存上限的 SQL Server 关系数据库引擎不同,SSAS 引擎 TotalMemoryLimit 的工作方式略有不同。TotalMemoryLimit 是服务器开始主动尝试尽快清除内存的限制。同样,LowMemoryLimit 是服务器开始懒散地尝试从 SSAS 缓存清除内存,并尝试减少对已在进行的任何现有会话或查询的影响的限制。达到 TotalMemoryLimit 时,服务器性能可能会受影响,因为服务器会非常主动地从缓存中清除内存。服务器还支持 HardMemoryLimit 设置,该设置为服务器开始任意终止会话以尝试释放内存的点。这可能会导致部分用户失败,也是未强制将 TotalMemoryLimit 作为硬限制的原因,因为部分查询或作业本质上将占用大量内存,而 OLAP 引擎会尽力在其配置支持的限制范围内为他们服务。
可以通过以下操作来解决此状况:
将 TotalMemoryLimit 降低到低于配置的阈值。
向服务器中增加物理内存,使以占总可用物理内存的百分比表示的 TotalMemoryLimit 设置低于阈值(用 GB 表示)。
减少配置的阈值以避免警报。
如果服务器无需考虑内存使用率,则完全禁用监视器。
SQL Server 2008 中的内存配置和调整大小考虑事项
针对 Analysis Services 内存属性的 TechNet 文档
名称 | 说明 | 默认值 |
已启用 | 启用或禁用工作流 | True |
生成警报 | 定义工作流是否生成警报 | True |
间隔(秒) | 运行工作流的重复间隔时间(秒)。 | 604800 |
同步时间 | 使用 24 小时格式指定的同步时间。可以忽略。 |
|
警告阈值(GB) | 当 SSAS 实例的配置的 TotalMemoryLimit 超过配置的阈值,导致操作系统执行必需的基本功能所需的物理内存(至少 2 GB)分配存在风险时,监视器将发出警报。 | 2 |
Target | Microsoft.SQLServer.2008.AnalysisServices.Instance | ||
Parent Monitor | System.Health.ConfigurationState | ||
Category | ConfigurationHealth | ||
Enabled | True | ||
Alert Generate | True | ||
Alert Severity | Warning | ||
Alert Priority | Normal | ||
Alert Auto Resolve | True | ||
Monitor Type | Microsoft.SQLServer.2008.AnalysisServices.MonitorType.Instance.TotalMemoryConfiguration | ||
Remotable | True | ||
Accessibility | Public | ||
Alert Message |
| ||
RunAs | Default |
<UnitMonitor ID="Microsoft.SQLServer.2008.AnalysisServices.UnitMonitor.Instance.TotalMemoryConfiguration" Accessibility="Public" Enabled="true" Target="SQLAS!Microsoft.SQLServer.2008.AnalysisServices.Instance" ParentMonitorID="SystemHealth!System.Health.ConfigurationState" Remotable="true" Priority="Normal" TypeID="Microsoft.SQLServer.2008.AnalysisServices.MonitorType.Instance.TotalMemoryConfiguration" ConfirmDelivery="false">
<Category>ConfigurationHealth</Category>
<AlertSettings AlertMessage="Microsoft.SQLServer.2008.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/>
</Configuration>
</UnitMonitor>