TotalMemoryLimit Configuration

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

The monitor alerts when the configured TotalMemoryLimit for the SSAS instance exceeds the configured threshold, risking allocation of physical memory required for the operating system to perform necessary basic functions, at least 2 GB.

Knowledge Base article:

Summary

The monitor alerts when the configured TotalMemoryLimit for the SSAS instance exceeds the configured threshold, risking allocation of physical memory required for the operating system to perform necessary basic functions. Furthermore, the configuration does not account for potential memory consumption by processes other than the specific monitored instance, which must also be considered by an administrator when adjusting the TotalMemoryLimit settings after thoroughly reviewing the SSAS Multidimensional Performance Guide.

Causes

The TotalMemoryLimit must allow at minimum, sufficient room for the operating system to perform basic necessary functions of memory management, and driver and hardware interaction. If the OS has insufficient memory available for these essential functions, system instability or failure can occur. Therefore, the setting must be configured somewhat below 100%, to ensure these functions have sufficient physical memory available. If it is set too high, then this monitor will alert to warn of the condition.

The default configuration for SSAS is 80 for the TotalMemoryLimit, representing 80% of physical memory available on the server. If other large consumers of memory (e.g., the SQL Server relational database engine) are present, this should be considered and the memory limit settings lowered accordingly. If the number is raised too high, the OS may run low on physical memory and high amounts of disk paging may result, leading to inefficient performance on the server.

If a specific number of bytes is required, any value greater than 100 is interpreted as a number of bytes of physical memory.

Note: Unlike the SQL Server relational database engine, which supports a hard maximum memory limitation, the SSAS engine TotalMemoryLimit works slightly differently. The TotalMemoryLimit is the limit at which the server will begin to aggressively attempt to clear memory as quickly as possible. Likewise, the LowMemoryLimit is the limit at which the server will begin to attempt to clear memory from the SSAS cache “lazily”, attempting to reduce impact on any existing sessions or queries already in progress. When the TotalMemoryLimit is reached, the server performance could be impacted, since the server will very aggressively be clearing memory from the cache. The server also supports a HardMemoryLimit setting – a point at which the server will begin arbitrarily terminating sessions to try to free memory. This will potentially cause failures for some users and that is why the TotalMemoryLimit is not enforced as a hard limit, since some queries or jobs may by their nature simply be very memory intensive, and the OLAP engine will do its best to serve them within the limits it is configured to support.

Resolutions

This condition may be resolved by any of the following actions:

External

Memory configuration and sizing considerations in SQL Server 2014

TechNet documentation for Analysis Services memory properties

Configure Server Properties in Analysis Services

TechNet documentation for SSAS Performance Counters

SSAS Multidimensional Performance Guide

Overrideable Parameters

Name

Description

Default Value

Enabled

Enables or disables the workflow

True

Generates Alerts

Defines whether the workflow generates an Alert

True

Interval Seconds

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

604800

Synchronization Time

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

 

Warning Threshold (GB)

The monitor alerts when the configured TotalMemoryLimit for the SSAS instance exceeds the configured threshold, risking allocation of physical memory required for the operating system to perform necessary basic functions, at least 2 GB.

2

Element properties:

TargetMicrosoft.SQLServer.2014.AnalysisServices.Instance
Parent MonitorSystem.Health.ConfigurationState
CategoryConfigurationHealth
EnabledTrue
Alert GenerateTrue
Alert SeverityWarning
Alert PriorityNormal
Alert Auto ResolveTrue
Monitor TypeMicrosoft.SQLServer.2014.AnalysisServices.MonitorType.Instance.TotalMemoryConfiguration
RemotableTrue
AccessibilityPublic
Alert Message
SSAS 2014: Invalid TotalMemoryLimit Configuration
The configured TotalMemoryLimit for the SSAS instance ({0} GB) exceeds the configured threshold required for necessary operating system functions and may lead to system instability or failure.
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.2014.AnalysisServices.UnitMonitor.Instance.TotalMemoryConfiguration" Accessibility="Public" Enabled="true" Target="SQLAS!Microsoft.SQLServer.2014.AnalysisServices.Instance" ParentMonitorID="SystemHealth!System.Health.ConfigurationState" Remotable="true" Priority="Normal" TypeID="Microsoft.SQLServer.2014.AnalysisServices.MonitorType.Instance.TotalMemoryConfiguration" ConfirmDelivery="false">
<Category>ConfigurationHealth</Category>
<AlertSettings AlertMessage="Microsoft.SQLServer.2014.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>