Memory Configuration Conflict with SQL Server

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

The monitor alerts if there is a SQL Server relational database engine process running on the server, and the 'Total Memory Limit' configuration for the SSAS instance is higher than the specified threshold. This is done to ensure that the SQL Server process has sufficient memory.

Knowledge Base article:

Summary

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

Causes

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, it can lead to competition for physical memory by both heavy consumers of the same fixed resource. This requires both database services to be configured to share sufficient physical memory in order to perform their required functions. If SSAS Total Memory Limit configuration is too high, then SSAS may consume excessive memory, which may lead to exhaustion of physical memory, due to competition with the relational database engine (or with other high memory consuming processes in fact also). Total Memory Limit should be configured sufficiently low to allow SQL Server’s configured memory consumption, plus a margin for the operating system and other typical process memory consumption that is essential on a computer.

Resolutions

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

External

TechNet documentation for Analysis Services memory properties

Configure Server Properties in Analysis Services

TechNet documentation for SSAS Performance Counters

Overridable Parameters

Name

Description

Default Value

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.

604800

Synchronization Time

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

 

Warning Threshold (%)

Health state changes if there is a SQL Server relational database engine process running on the server and the 'Total Memory Limit' configuration setting for SSAS instance exceeds the threshold.

40

Timeout (seconds)

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

300

Element properties:

TargetMicrosoft.SQLServer.AnalysisServices.Windows.Instance
Parent MonitorSystem.Health.ConfigurationState
CategoryConfigurationHealth
EnabledTrue
Alert GenerateTrue
Alert SeverityWarning
Alert PriorityNormal
Alert Auto ResolveTrue
Monitor TypeMicrosoft.SQLServer.AnalysisServices.Windows.Monitoring.MonitorType.Instance.ConfigurationConflictWithSQLServer
RemotableTrue
AccessibilityPublic
Alert Message
SSAS: Memory configuration conflict with SQL Server
The SQL Server Analysis Services instance 'Total Memory Limit' 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.AnalysisServices.Windows.Monitoring.Monitor.Instance.ConfigurationConflictWithSQLServer" Accessibility="Public" Enabled="true" Target="SQLAS!Microsoft.SQLServer.AnalysisServices.Windows.Instance" ParentMonitorID="SystemHealth!System.Health.ConfigurationState" Remotable="true" Priority="Normal" TypeID="Microsoft.SQLServer.AnalysisServices.Windows.Monitoring.MonitorType.Instance.ConfigurationConflictWithSQLServer" ConfirmDelivery="false">
<Category>ConfigurationHealth</Category>
<AlertSettings AlertMessage="Microsoft.SQLServer.AnalysisServices.Windows.Monitoring.Monitor.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/>
<TimeoutSeconds>300</TimeoutSeconds>
</Configuration>
</UnitMonitor>