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'.
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'.
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.
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:
Identify the session(s) responsible for the most significant memory allocations, and manually terminate them.
Identify the session(s) responsible for the most significant memory allocations, and address them on a case-by-case basis to reschedule processing of jobs or reports, pre-allocate with cache warming queries during the periods of lower utilization, or by designing specific aggregations in advance to be built during the processing, and hence reducing memory consumption by user queries subsequently.
Increase physical memory on the host computer.
Decrease memory usage by other processes on the host computer, such as instances of the SQL Server relational database engine or other SSAS instances.
Increase 'Total Memory Limit' setting or configured thresholds for the alert to avoid the condition.
Disable the monitor entirely if memory usage is not a concern on the server.
Analysis Services memory properties
Configure Server Properties in Analysis Services
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 |
Target | Microsoft.SQLServer.AnalysisServices.Windows.Instance | ||
Parent Monitor | System.Health.PerformanceState | ||
Category | PerformanceHealth | ||
Enabled | True | ||
Alert Generate | True | ||
Alert Severity | Error | ||
Alert Priority | Normal | ||
Alert Auto Resolve | True | ||
Monitor Type | Microsoft.SQLServer.AnalysisServices.Windows.Monitoring.MonitorType.Instance.MemoryUsagePercent | ||
Remotable | True | ||
Accessibility | Public | ||
Alert Message |
| ||
RunAs | Default |
<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>