内存使用率

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

SSAS 实例的内存分配超过配置的“警告阈值”(以占 SSAS 实例的“总内存限制”设置的百分比表示)时,监视器将报告警告。这些配置超过配置的“严重阈值”时,监视器将发出严重警报。

Knowledge Base article:

摘要

SSAS 实例的内存分配超过配置的“警告阈值”(以占 SSAS 实例的“总内存限制”设置的百分比表示)时,监视器将报告警告。这些配置超过配置的“严重阈值”时,监视器将发出严重警报。

原因

在某些情况下,SSAS 可以达到或超过“总内存限制”设置。在某些情况下,单个操作需要内存超过这些限制,尽管服务器已尽力从其他不太紧急的任务清除内存,但分配有时可能必须超过配置的限制,否则必须强制操作失败。

处理大型维度或事实数据,尤其是存在包含占用大量空间的数据类型(例如长字符串、二进制数据等)的属性时,或者维度包含多个成员时,可能发生这种情况。此外,在服务器上执行的查询可能会占用极大的空间,尤其是对于多个维度被交叉联接或需要大量计算以便为明智的管理员之前未整合或不可能提前整合的单元格生成结果的情况更是如此。

解决方法

当超过了服务器的内存限制时,管理员可以通过多种方法来修复此问题。在考虑了导致内存使用率的底层活动、服务器上的工作负荷要求、可用资源和其他因素并全面查看和考虑 SSAS 多维性能指南或根据需要咨询 Microsoft 技术支持人员之后,可用使用以下任一方法来解决此问题:

外部

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

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

在 Analysis Services 中配置服务器属性

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

SSAS 多维性能指南

可替代参数

名称

说明

默认值

严重阈值(%)

当 Analysis Services 内存使用率(%)超出阈值时,运行状况将更改为“严重”。

95

已启用

启用或禁用工作流

生成警报

定义工作流是否生成警报

间隔(秒)

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

900

样本数

如果阈值违反次数大于或等于最小违反次数,运行状况将发生更改。

4

同步时间

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

 

超时(秒)

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

300

警告阈值(%)

当 Analysis Services 内存使用率(%)超出阈值,但仍低于严重阈值(%)时,运行状况将更改为“警告”。

80

Element properties:

TargetMicrosoft.SQLServer.2016.AnalysisServices.Instance
Parent MonitorSystem.Health.PerformanceState
CategoryPerformanceHealth
EnabledTrue
Alert GenerateTrue
Alert SeverityError
Alert PriorityNormal
Alert Auto ResolveTrue
Monitor TypeMicrosoft.SQLServer.2016.AnalysisServices.MonitorType.Instance.MemoryUsagePercent
RemotableTrue
AccessibilityPublic
Alert Message
SSAS 2016: 高内存利用率
SSAS 的当前内存利用率({3} 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.MemoryUsage" Accessibility="Public" Enabled="true" Target="SQLAS!Microsoft.SQLServer.2016.AnalysisServices.Instance" ParentMonitorID="SystemHealth!System.Health.PerformanceState" Remotable="true" Priority="Normal" TypeID="Microsoft.SQLServer.2016.AnalysisServices.MonitorType.Instance.MemoryUsagePercent" ConfirmDelivery="false">
<Category>PerformanceHealth</Category>
<AlertSettings AlertMessage="Microsoft.SQLServer.2016.AnalysisServices.UnitMonitor.Instance.MemoryUsage.AlertMessage">
<AlertOnState>Error</AlertOnState>
<AutoResolve>true</AutoResolve>
<AlertPriority>Normal</AlertPriority>
<AlertSeverity>Error</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="Error" MonitorTypeStateID="Critical" HealthState="Error"/>
<OperationalState ID="Warning" MonitorTypeStateID="Warning" HealthState="Warning"/>
<OperationalState ID="Success" MonitorTypeStateID="Success" HealthState="Success"/>
</OperationalStates>
<Configuration>
<CriticalThreshold>95</CriticalThreshold>
<WarningThreshold>80</WarningThreshold>
<IntervalSeconds>900</IntervalSeconds>
<SyncTime/>
<TimeoutSeconds>300</TimeoutSeconds>
</Configuration>
</UnitMonitor>