サーバーのメモリ使用量

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

モニターは、サーバー上で Analysis Services プロセス以外のプロセスが使用しているメモリ量を監視し、Analysis Services で TotalMemoryLimit が常に使用できるようにします。

Knowledge Base article:

概要

SSAS インスタンスをホストするサーバー上のメモリ使用量は、インスタンスも割り振りを受ける必要のある共有リソースと競合するため、サーバーの正常性とパフォーマンスに影響を与えることがあります。これは、コンピューターで使用可能な物理メモリを使い尽くす結果になることがあり、その場合はオペレーティング システムが仮想メモリをディスク上のページ ファイルにマップする必要が生じるため、物理メモリより桁違いに低速になります。ビジネスに不可欠なアプリケーションが SSAS インスタンスに依存している場合は、この状況になるのを防止するために、他のプロセス (たとえば、ウイルス対策、ディスクの最適化、SSAS の他のインスタンス、SQL Server のリレーショナル データベース エンジンなど) が過剰なメモリ割り当てを受けることがないようにサーバーを構成する必要があります。

原因

SSAS インスタンスとメモリを競合することの多いプロセスには、SSAS の他のインスタンス、SQL Server のリレーショナル データベース エンジン、他のデータベース サーバーなどがあります。これらのプロセスは、SSAS そのものがホストされているサーバー上のメモリを大量に使用するからです。もちろん、データベース以外のソフトウェアがメモリを大量に使用することもあります。このため、メモリの考慮事項がサーバーの構成に影響を与えるケースが多くなっています。

タスク マネージャーを使用して、サーバー上の各種プロセスによるメモリ使用量を調査できます。Window Server 2008 R2 の [プロセス] タブおよび Windows Server 2014 の [詳細] タブで、[メモリ] 列でソートすることにより、システムで最も多くのメモリを消費しているプロセスを簡単に確認して見つけることができます。SSAS のインスタンス (msmdsrv.exe) または SQL Server リレーショナル データベース エンジン (sqlservr.exe) が過剰にメモリを消費している場合、これは、それらの使用量を素早く識別するための簡単な方法の一つであり、システム上の他のプロセスがその状態に関与しているかどうかを調べることも、もちろん可能です。続いて、SQL 管理者によるインスタンスのメモリ使用量の調整、ハードウェアの追加、コンピューター上のワークロードの減少や分割といった是正措置を適宜考案することができます。

解決方法

サーバーの総合的な使用状況の問題を解決するには、ワークロードの要件、ユーザーおよびジョブのスケジュール、サーバー コンピューター上のその他のスケジュールされたプロセス、および使用可能なリソースなど (これらに限定されません)、数多くの要因を管理者が理解し、検討する必要があります。サーバー コンピューター上のメモリ割り当ての合計サイズが過剰になる状態を軽減するには、次のいずれかの処置が役立つことがあります。

外部資料

SQL Server 2014 でのメモリ構成とサイズ変更の考慮事項

Analysis Services メモリのプロパティに関する TechNet 資料

Analysis Services でのサーバーのプロパティの構成

SSAS パフォーマンス カウンターに関する TechNet 資料

SSAS 多次元パフォーマンス ガイド

上書き可能なパラメーター

名前

説明

既定値

重大なしきい値 (%)

正常性状態は、予約されていない空き領域 (%) がしきい値を下回ると重大に変更されます。

5

有効

ワークフローを有効または無効にします

True

アラートを生成する

ワークフローがアラートを生成するかどうかを定義する

True

間隔 (秒)

ワークフローを実行する定期的な実行間隔 (秒)。

900

同期時刻

24 時間形式で指定した同期時刻。省略可能です。

4

警告しきい値 (%)

正常性状態は、予約されていない空き領域 (%) がしきい値を下回り、同時に重大なしきい値 (%) よりも高い場合に警告に変更されます。

 

Element properties:

TargetMicrosoft.SQLServer.2014.AnalysisServices.Instance
Parent MonitorSystem.Health.PerformanceState
CategoryPerformanceHealth
EnabledTrue
Alert GenerateTrue
Alert SeverityError
Alert PriorityNormal
Alert Auto ResolveTrue
Monitor TypeMicrosoft.SQLServer.2014.AnalysisServices.MonitorType.Instance.MemoryUsageByOtherProcessPercent
RemotableTrue
AccessibilityPublic
Alert Message
SSAS 2014: 他のプロセスが割り当てたメモリが多すぎる
他のプロセスで割り当てられているメモリ量 ({4} GB) が多すぎるため、TotalMemoryLimit 設定によって指定されたメモリ量を SSAS で使用できない可能性があります。
サーバー上の総メモリ: {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.2014.AnalysisServices.UnitMonitor.Instance.MemoryUsageByOtherProcess" Accessibility="Public" Enabled="true" Target="SQLAS!Microsoft.SQLServer.2014.AnalysisServices.Instance" ParentMonitorID="SystemHealth!System.Health.PerformanceState" Remotable="true" Priority="Normal" TypeID="Microsoft.SQLServer.2014.AnalysisServices.MonitorType.Instance.MemoryUsageByOtherProcessPercent" ConfirmDelivery="false">
<Category>PerformanceHealth</Category>
<AlertSettings AlertMessage="Microsoft.SQLServer.2014.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>