Memory consumed by SSAS Instance

Microsoft.SQLServer.AnalysisServices.Windows.Monitoring.Monitor.Instance.MemoryUsage (UnitMonitor)

The monitor reports a warning when memory allocations by SSAS instance surpass the configured 'Warning Threshold' expressed as a percentage of the 'Total Memory Limit' setting for the SSAS instance. The monitor issues a critical alert when these allocations surpass the configured 'Critical Threshold'.

Knowledge Base article:

Summary

The monitor reports a warning when memory allocations by SSAS instance surpass the configured 'Warning Threshold' expressed as a percentage of the 'Total Memory Limit' setting for the SSAS instance. The monitor issues a critical alert when these allocations surpass the configured 'Critical Threshold'.

Causes

SSAS can approach or exceed 'Total Memory Limit' setting under some circumstances. In some cases, a single operation requires memory beyond these limit, and despite the server’s best effort to clear memory from other less immediate tasks, allocations may sometimes necessarily exceed the configured limits, or else the operations must be forced to fail.

This can occur while processing large dimensions or fact data, particularly if there are attributes with data types consuming large amounts of space (e.g. long strings, binary data, etc.) present, or if the dimension contains numerous members. In addition, queries executed on the server may cover very large spaces, particularly if multiple dimensions are being cross-joined, or significant calculations are required to derive results for cells not aggregated previously by a wise administrator, or simply not possible to aggregate in advance.

Resolutions

When memory limits for a server are exceeded, there are numerous approaches that the administrators may use to remediate the issue. After considering the underlying activity causing the memory usage, requirements for workload on the server, available resources, and other factors, or consulting Microsoft support, as necessary, any of the following approaches may be used to resolve the issue:

External

Analysis Services memory properties

Configure Server Properties in Analysis Services

SSAS Performance Counters

Overridable Parameters

Name

Description

Default Value

Critical Threshold (%)

Health state changes to 'Critical' when Analysis Services Memory Usage (%) exceeds the threshold.

95

Enabled

Enables or disables the workflow.

Yes

Generates Alerts

Defines whether the workflow generates an Alert.

Yes

Interval Seconds

The recurring interval of time in seconds in which to run the workflow.

900

Number of samples

Indicates how many times a measured value should breach a threshold before the state is changed.

4

Synchronization Time

The synchronization time specified by using a 24-hour format. May be omitted.

 

Timeout (seconds)

Specifies the time the workflow is allowed to run before being closed and marked as failed.

300

Warning Threshold (%)

Health state changes to 'Warning' when Analysis Services Memory Usage (%) exceeds the threshold but is still lower than 'Critical Threshold (%)'.

80

Element properties:

TargetMicrosoft.SQLServer.AnalysisServices.Windows.Instance
Parent MonitorSystem.Health.PerformanceState
CategoryPerformanceHealth
EnabledTrue
Alert GenerateTrue
Alert SeverityError
Alert PriorityNormal
Alert Auto ResolveTrue
Monitor TypeMicrosoft.SQLServer.AnalysisServices.Windows.Monitoring.MonitorType.Instance.MemoryUsagePercent
RemotableTrue
AccessibilityPublic
Alert Message
SSAS: Running SSAS process consumes too much memory
Current memory utilization for SSAS ({3} GB) surpasses the configured threshold expressed as a percentage of the 'Total Memory Limit' setting for the instance.
Total memory on the server: {2} GB
Total memory usage: {5} GB
Memory used by non-SSAS processes: {4} GB
Memory used by SSAS: {3} GB
SSAS Memory Limit Low: {6} GB ({7}\%)
SSAS Memory Limit High: {0} GB ({8}\%)
RunAsDefault

Source Code:

<UnitMonitor ID="Microsoft.SQLServer.AnalysisServices.Windows.Monitoring.Monitor.Instance.MemoryUsage" Accessibility="Public" Enabled="true" Target="SQLAS!Microsoft.SQLServer.AnalysisServices.Windows.Instance" ParentMonitorID="SystemHealth!System.Health.PerformanceState" Remotable="true" Priority="Normal" TypeID="Microsoft.SQLServer.AnalysisServices.Windows.Monitoring.MonitorType.Instance.MemoryUsagePercent" ConfirmDelivery="false">
<Category>PerformanceHealth</Category>
<AlertSettings AlertMessage="Microsoft.SQLServer.AnalysisServices.Windows.Monitoring.Monitor.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>