Memory Usage on the Server

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

The monitor observes the memory usage by non Analysis Services processes on the server, to ensure the TotalMemoryLimit for Analysis Services is always available.

Knowledge Base article:

Summary

Memory usage on the server hosting the SSAS instance may impact the health and performance of the server by competing for shared resources from which the instance must also make allocations. This can lead to exhaustion of available physical memory on the computer, which can force the operating system to map virtual memory to the page file on disk, orders of magnitude slower than physical memory. For any business critical applications dependent upon a SSAS instance, the server should be configured such that other processes (e.g., anti-virus, disk defragmentation, other instances of SSAS or the SQL Server relational database engine, etc.) do not allocate excessive memory, leading to this circumstance.

Causes

The most common processes to significantly compete with SSAS instances for memory primarily include other instances of SSAS, the SQL Server relational database engine, or other database servers, since these tend to be the most intensive consumers of memory hosted on servers where SSAS is also hosted. Sometimes non-database software may also consume memory heavily as well of course. As such, memory considerations may frequently impact the configuration of a server.

The Task Manager can be used to examine memory usage by various processes on the server. On the Processes tab in Window Server 2008 R2, and Details tab in Windows Server 2012, one may sort by the Memory column to easily check to find the processes consuming the most memory on the system. If instance(s) of SSAS (msmdsrv.exe) or SQL Server relational database engine (sqlservr.exe) are consuming excessive memory, this is one simple way to identify their usage quickly, and of course, it is also possible to see if other processes on the system may be contributing to the condition. Subsequently, corrective actions (such as tuning memory usage of the instances by the SQL administrator, adding hardware, or reducing/dividing workload on the machine) may be devised accordingly.

Resolutions

Resolving issues of total server usage require administrators to understand and consider numerous factors including but not limited to workload requirements, user and job schedules, other scheduled processes on the server computer, and resources available. Actions to remediate excessive total memory allocations on the server computer may include any of the following actions:

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.PerformanceState
CategoryPerformanceHealth
EnabledTrue
Alert GenerateTrue
Alert SeverityError
Alert PriorityNormal
Alert Auto ResolveTrue
Monitor TypeMicrosoft.SQLServer.2008.AnalysisServices.MonitorType.Instance.MemoryUsageByOtherProcessPercent
RemotableTrue
AccessibilityPublic
Alert Message
SSAS 2008: Other processes have allocated too much memory
The amount of memory prescribed by TotalMemoryLimit setting may be not available for SSAS because other processes have allocated too much memory ({4} GB).

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.MemoryUsageByOtherProcess" Accessibility="Public" Enabled="true" Target="SQLAS!Microsoft.SQLServer.2008.AnalysisServices.Instance" ParentMonitorID="SystemHealth!System.Health.PerformanceState" Remotable="true" Priority="Normal" TypeID="Microsoft.SQLServer.2008.AnalysisServices.MonitorType.Instance.MemoryUsageByOtherProcessPercent" ConfirmDelivery="false">
<Category>PerformanceHealth</Category>
<AlertSettings AlertMessage="Microsoft.SQLServer.2008.AnalysisServices.UnitMonitor.Instance.MemoryUsageByOtherProcess.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="Below" HealthState="Error"/>
<OperationalState ID="Warning" MonitorTypeStateID="Between" HealthState="Warning"/>
<OperationalState ID="Success" MonitorTypeStateID="Above" HealthState="Success"/>
</OperationalStates>
<Configuration>
<WarningThreshold>10</WarningThreshold>
<CriticalThreshold>5</CriticalThreshold>
<IntervalSeconds>900</IntervalSeconds>
<SyncTime/>
</Configuration>
</UnitMonitor>