Memory Configuration Conflict with SQL Server

Microsoft.SQLServer.2008.AnalysisServices.UnitMonitor.Instance.ConfigurationConflictWithSQLServer (UnitMonitor)

The monitor alerts if there is a SQL Server relational database engine process running on the server and the TotalMemoryLimit configuration for the SSAS instance is higher than the specified threshold, in order to ensure that the SQL server process has sufficient memory.

Knowledge Base article:

Summary

The SQL Server Analysis Services TotalMemoryLimit configuration setting should be adjusted accordingly to accommodate memory allocations for other processes on the computer.

Causes

The SQL Server relational database engine in particular is a primary example of a common process that can consume memory resources on a computer also running SSAS, and in this circumstance, can lead to competition for physical memory by both heavy consumers of the same fixed resource. This requires that both database services be configured to allow one another sufficient physical memory to each perform their required functions. If the SSAS TotalMemoryLimit configuration is too high, then SSAS may consume excessive memory, leading to exhaustion of physical memory, due to competition with the relational database engine (or with other high memory consuming processes in fact also). The TotalMemoryLimit should be configured sufficiently low to allow for SQL Server’s configured memory consumption, plus a margin for the operating system and other typical process memory consumption that is necessary on the computer.

Resolutions

When memory configuration conflicts occur, resources and demands of users and other processes must be weighed by an administrator, and then the configuration of all relevant processes adjusted accordingly. The most common scenario for this type of problem on a Microsoft database server arise from instance(s) of SSAS and of the SQL Server relational database engine. Fortunately, both services do feature configuration settings that can be adjusted as necessary. There is no universally correct TotalMemoryLimit setting for SSAS, or max memory limit setting for the SQL relational database engine, so the threshold for this alert can be adjusted by an administrator to account for each specific environment. When it is encountered, the condition may be alleviated by any of many potential approaches:

External

TechNet documentation for Analysis Services memory properties

Configure Server Properties in Analysis Services

SSAS Multidimensional Performance Guide

Element properties:

TargetMicrosoft.SQLServer.2008.AnalysisServices.Instance
Parent MonitorSystem.Health.ConfigurationState
CategoryConfigurationHealth
EnabledTrue
Alert GenerateTrue
Alert SeverityWarning
Alert PriorityNormal
Alert Auto ResolveTrue
Monitor TypeMicrosoft.SQLServer.2008.AnalysisServices.MonitorType.Instance.ConfigurationConflictWithSQLServer
RemotableTrue
AccessibilityPublic
Alert Message
SSAS 2008: Memory configuration conflict with SQL Server

The SQL Server Analysis Services instance TotalMemoryLimit configuration setting ({0} GB) leaves {1} GB out of {2} GB for the operating system and SQL Server, which is below the configured threshold for the alert.

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.2008.AnalysisServices.UnitMonitor.Instance.ConfigurationConflictWithSQLServer" 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.ConfigurationConflictWithSQLServer" ConfirmDelivery="false">
<Category>ConfigurationHealth</Category>
<AlertSettings AlertMessage="Microsoft.SQLServer.2008.AnalysisServices.UnitMonitor.Instance.ConfigurationConflictWithSQLServer.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="ConfigurationConflict" HealthState="Warning"/>
<OperationalState ID="Success" MonitorTypeStateID="NoConfigurationConflict" HealthState="Success"/>
</OperationalStates>
<Configuration>
<Threshold>40</Threshold>
<IntervalSeconds>604800</IntervalSeconds>
<SyncTime/>
</Configuration>
</UnitMonitor>