SSAS 实例的内存分配超过配置的“警告阈值”(以占 SSAS 实例的“总内存限制”设置的百分比表示)时,监视器将报告警告。这些配置超过配置的“严重阈值”时,监视器将发出严重警报。
SSAS 实例的内存分配超过配置的“警告阈值”(以占 SSAS 实例的“总内存限制”设置的百分比表示)时,监视器将报告警告。这些配置超过配置的“严重阈值”时,监视器将发出严重警报。
在某些情况下,SSAS 可以达到或超过“总内存限制”设置。在某些情况下,单个操作需要内存超过这些限制,尽管服务器已尽力从其他不太紧急的任务清除内存,但分配有时可能必须超过配置的限制,否则必须强制操作失败。
处理大型维度或事实数据,尤其是存在包含占用大量空间的数据类型(例如长字符串、二进制数据等)的属性时,或者维度包含多个成员时,可能发生这种情况。此外,在服务器上执行的查询可能会占用极大的空间,尤其是对于多个维度被交叉联接或需要大量计算以便为明智的管理员之前未整合或不可能提前整合的单元格生成结果的情况更是如此。
当超过了服务器的内存限制时,管理员可以通过多种方法来修复此问题。在考虑了导致内存使用率的底层活动、服务器上的工作负荷要求、可用资源和其他因素并全面查看和考虑 SSAS 多维性能指南或根据需要咨询 Microsoft 技术支持人员之后,可用使用以下任一方法来解决此问题:
确认负责最重要的内存分配的会话,并手动终止这些会话。
确认负责最重要的内存分配的会话,并按情况处理这些会话以重新计划处理作业或报告,在低利用率期间预分配缓存警告查询,或通过提前设计要在处理过程中进行构建的特定聚合,从而减少随后的用户查询占用的内存。
增加主计算机上的物理内存。
减少主计算机上其他进程(如 SQL Server 关系数据库引擎的实例或其他 SSAS 实例)的内存使用率。
增加警报的“总内存限制”或配置的阈值以避免这种状况。
如果服务器无需考虑内存使用率,则完全禁用监视器。
针对 Analysis Services 内存属性的 TechNet 文档
名称 | 说明 | 默认值 |
严重阈值(%) | 当 Analysis Services 内存使用率(%)超出阈值时,运行状况将更改为“严重”。 | 95 |
已启用 | 启用或禁用工作流 | 是 |
生成警报 | 定义工作流是否生成警报 | 是 |
间隔(秒) | 运行工作流的重复间隔时间(秒)。 | 900 |
样本数 | 如果阈值违反次数大于或等于最小违反次数,运行状况将发生更改。 | 4 |
同步时间 | 使用 24 小时格式指定的同步时间。可以忽略。 |
|
超时(秒) | 指定允许工作流在被关闭并标记为失败之前运行的时间。 | 300 |
警告阈值(%) | 当 Analysis Services 内存使用率(%)超出阈值,但仍低于严重阈值(%)时,运行状况将更改为“警告”。 | 80 |
Target | Microsoft.SQLServer.2008.AnalysisServices.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.2008.AnalysisServices.MonitorType.Instance.MemoryUsagePercent | ||
Remotable | True | ||
Accessibility | Public | ||
Alert Message |
| ||
RunAs | Default |
<UnitMonitor ID="Microsoft.SQLServer.2008.AnalysisServices.UnitMonitor.Instance.MemoryUsage" 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.MemoryUsagePercent" ConfirmDelivery="false">
<Category>PerformanceHealth</Category>
<AlertSettings AlertMessage="Microsoft.SQLServer.2008.AnalysisServices.UnitMonitor.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="Above" HealthState="Error"/>
<OperationalState ID="Warning" MonitorTypeStateID="Between" HealthState="Warning"/>
<OperationalState ID="Success" MonitorTypeStateID="Below" HealthState="Success"/>
</OperationalStates>
<Configuration>
<WarningThreshold>80</WarningThreshold>
<CriticalThreshold>95</CriticalThreshold>
<IntervalSeconds>900</IntervalSeconds>
<SyncTime/>
<TimeoutSeconds>300</TimeoutSeconds>
</Configuration>
</UnitMonitor>