如果 SQL Server 关系数据库引擎进程在服务器上运行,且 SSAS 实例的“总内存限制”配置高于指定阈值,监视器将发出警报,以确保 SQL Server 进程有足够的内存。
应相应调整 SQL Server Analysis Services“总内存限制”配置设置,以适合计算机上针对其他进程的内存分配。
SQL Server 关系数据库引擎特别是在同时运行 SSAS 的计算机上可以占用内存资源的常见进程的主要示例,且在此情况下,可能会导致同一固定资源的两个大量使用者竞争物理内存。这要求两个数据库服务可以配置为共享足够的物理内存以执行必需的功能。如果 SSAS“总内存限制”配置过高,则 SSAS 可能会占用过多的内存,由于与关系数据库引擎(或事实上也占用较多内存的其他进程)竞争从而导致物理内存耗尽。“总内存限制”应配置为足够低以允许 SQL Server 的配置内存占用加上操作系统和计算机上必需的其他典型进程内存占用的备用量。
内存配置发生冲突时,管理员必须考虑用户和其他进程的资源和需求,并相应调整所有相关进程的配置。Microsoft 数据库服务器上此类问题最常见的情况源自 SSAS 实例和 SQL Server 关系数据库引擎。幸运的是,两种服务都提供可以根据需要进行调整的功能配置设置。SSAS 没有通用的“总内存限制”设置,SQL 关系数据库引擎也没有通用的内存上限设置,因此管理员可以调整此警报的阈值以考虑各种具体的环境。发生问题时,可以采用以下任一种方法来缓解这种状况:
调整 SQL Server 实例内存上限设置以减少这些进程占用的内存。
降低 SSAS 实例“总内存限制”配置设置以减少这些进程占用的内存。
增加服务器上的可用内存。
调整警报的阈值。
对管理员确定不需要的情况禁用警报。
Memory configuration and sizing considerations in SQL Server 2016(SQL Server 2016 中的内存配置和调整大小考虑事项)
针对 Analysis Services 内存属性的 TechNet 文档
名称 | 说明 | 默认值 |
已启用 | 启用或禁用工作流 | 是 |
生成警报 | 定义工作流是否生成警报 | 是 |
间隔(秒) | 运行工作流的重复间隔时间(秒)。 | 604800 |
同步时间 | 使用 24 小时格式指定的同步时间。可以忽略。 |
|
警告阈值 (%) | 如果 SQL Server 关系数据库引擎进程在服务器上运行,且 SSAS 实例的“总内存限制”配置设置超过阈值,运行状况将发生更改。 | 40 |
超时(秒) | 指定允许工作流在被关闭并标记为失败之前运行的时间。 | 300 |
Target | Microsoft.SQLServer.2016.AnalysisServices.Instance | ||
Parent Monitor | System.Health.ConfigurationState | ||
Category | ConfigurationHealth | ||
Enabled | True | ||
Alert Generate | True | ||
Alert Severity | Warning | ||
Alert Priority | Normal | ||
Alert Auto Resolve | True | ||
Monitor Type | Microsoft.SQLServer.2016.AnalysisServices.MonitorType.Instance.ConfigurationConflictWithSQLServer | ||
Remotable | True | ||
Accessibility | Public | ||
Alert Message |
| ||
RunAs | Default |
<UnitMonitor ID="Microsoft.SQLServer.2016.AnalysisServices.UnitMonitor.Instance.ConfigurationConflictWithSQLServer" Accessibility="Public" Enabled="true" Target="SQLAS!Microsoft.SQLServer.2016.AnalysisServices.Instance" ParentMonitorID="SystemHealth!System.Health.ConfigurationState" Remotable="true" Priority="Normal" TypeID="Microsoft.SQLServer.2016.AnalysisServices.MonitorType.Instance.ConfigurationConflictWithSQLServer" ConfirmDelivery="false">
<Category>ConfigurationHealth</Category>
<AlertSettings AlertMessage="Microsoft.SQLServer.2016.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/>
<TimeoutSeconds>300</TimeoutSeconds>
</Configuration>
</UnitMonitor>