總記憶體限制組態

Microsoft.SQLServer.2016.AnalysisServices.UnitMonitor.Instance.TotalMemoryConfiguration (UnitMonitor)

為 SSAS 執行個體所設定的總記憶體限制,超出設定的臨界值 (有配置到作業系統執行其必要基本功能所需的實體記憶體之風險) (至少 2 GB) 時,此監視器會發出警示。

Knowledge Base article:

摘要

為 SSAS 執行個體所設定的總記憶體限制,超出設定的臨界值 (有配置到作業系統執行其必要基本功能所需的實體記憶體之風險) 時,此監視器會發出警示。此外,組態不會考慮非特定受監視執行個體之處理序的潛在記憶體消耗,但系統管理員在完整檢閱 SSAS Multidimensional Performance Guide (SSAS 多維度效能指南) 之後,於調整總記憶體限制設定時,也必須考慮。

原因

總記憶體限制至少必須要有足夠的空間,可供作業系統執行記憶體管理以及驅動程式與硬體互動的基本必要功能。如果 OS 的可用記憶體不足以執行這些基本功能,則系統會不穩定或失敗。因此,必須將此設定設為稍微低於 100%,才可確保這些功能有足夠的可用實體記憶體。如果設定的太高,則此監視器將會發出警示,警告發生此狀況。

總記憶體限制的預設 SSAS 組態為 80,代表伺服器上有 80% 的可用實體記憶體。如果出現其他大量的記憶體消耗 (例如,SQL Server 關聯式資料庫引擎),則應該考慮此值,並相對應地降低記憶體限制的設定。如果此數字設得太高,則 OS 的實體記憶體可能會不足,並會產生大量的磁碟分頁,進而導致伺服器的效能不佳。

如果需要特定的位元組數,則所有大於 100 的值都會解譯為實體記憶體的位元組數。

附註: SSAS 引擎的總記憶體限制與支援固定記憶體上限的 SQL Server 關聯式資料庫引擎的運作方式略有不同。總記憶體限制是伺服器開始積極嘗試盡快清除記憶體的限制。同樣地,記憶體下限是伺服器開始嘗試「延遲」清除 SSAS 快取中記憶體的限制,以嘗試減少對任何現有工作階段或已在進行中查詢的影響。達到總記憶體限制時,可能會影響伺服器效能,因為伺服器會積極地清除快取中的記憶體。伺服器也支援固定記憶體限制的設定 - 伺服器將開始任意終止工作階段以嘗試釋出憶體的時間點。如此可能會導致部分使用者失敗,而這就是不會強制將總記憶體限制定為固定限制的原因,因為部分查詢或作業依其本質就是需要大量的記憶體,而 OLAP 引擎會在設定支援的限制內,盡其所能地提供記憶體。

解決方式

此狀況可透過下列任一動作解決:

外部資源

Memory configuration and sizing considerations in SQL Server 2016 (SQL Server 2016 中記憶體組態與設定大小的考量事項)

Analysis Services 記憶體屬性的 TechNet 文件

在 Analysis Services 中設定伺服器屬性

SSAS 效能計數器的 TechNet 文件

SSAS Multidimensional Performance Guide (SSAS 多維度效能指南)

可覆寫的參數

名稱

描述

預設值

已啟用

啟用或停用工作流程

產生警示

定義工作流程是否產生警示

間隔秒數

執行工作流程的週期性時間間隔 (秒)。

604800

同步處理時間

使用 24 小時制指定的同步處理時間。將會忽略。

 

警告臨界值 (GB)

為作業系統所設定的總記憶體限制超出設定的臨界值 (有配置到作業系統執行其必要基本功能所需的實體記憶體之風險) (至少 2 GB) 時,此監視器會發出警示。

2

逾時 (秒)

指定允許工作流程在關閉且標示為失敗之前執行的時間。

300

Element properties:

TargetMicrosoft.SQLServer.2016.AnalysisServices.Instance
Parent MonitorSystem.Health.ConfigurationState
CategoryConfigurationHealth
EnabledTrue
Alert GenerateTrue
Alert SeverityWarning
Alert PriorityNormal
Alert Auto ResolveTrue
Monitor TypeMicrosoft.SQLServer.2016.AnalysisServices.MonitorType.Instance.TotalMemoryConfiguration
RemotableTrue
AccessibilityPublic
Alert Message
SSAS 2016: 總記憶體限制組態無效
為 SSAS 執行個體所設定的總記憶體限制 ({0} GB),超過為基本作業系統功能所需而設定的臨界值,因而可能會導致系統不穩定或失敗。
伺服器上的記憶體總計: {2} GB
記憶體使用量總計: {5} GB
非 SSAS 處理序所使用的記憶體: {4} GB
SSAS 所使用的記憶體: {3} GB
SSAS 記憶體下限: {6} GB ({7}\%)
SSAS 記憶體上限: {0} GB ({8}\%)
RunAsDefault

Source Code:

<UnitMonitor ID="Microsoft.SQLServer.2016.AnalysisServices.UnitMonitor.Instance.TotalMemoryConfiguration" 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.TotalMemoryConfiguration" ConfirmDelivery="false">
<Category>ConfigurationHealth</Category>
<AlertSettings AlertMessage="Microsoft.SQLServer.2016.AnalysisServices.UnitMonitor.Instance.TotalMemoryConfiguration.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="NotConfigured" HealthState="Warning"/>
<OperationalState ID="Success" MonitorTypeStateID="Configured" HealthState="Success"/>
</OperationalStates>
<Configuration>
<Threshold>2</Threshold>
<IntervalSeconds>604800</IntervalSeconds>
<SyncTime/>
<TimeoutSeconds>300</TimeoutSeconds>
</Configuration>
</UnitMonitor>