サーバーのメモリ使用量

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

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

Knowledge Base article:

概要

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

原因

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

さらに、予約されていない空きメモリ (FreeUnreservedPercent パラメーター) の値がマイナスになっている可能性があります。このパラメーターは、次のように計算されます。合計メモリの 100% から、インスタンス (SSAS) によって使用される高いメモリ使用量を差し引き、その他のプロセスによるメモリ使用量を差し引きます。結果は次のようになります。

タスク マネージャーを使用すると、サーバー上のさまざまなプロセスによるメモリ使用量を調査できます。Window Server 2008 R2 の [プロセス] タブまたは Windows Server 2008 の [詳細] タブを [メモリ] 列でソートすれば、システムのメモリを最も多く使用しているプロセスが簡単にわかります。SSAS のインスタンス (msmdsrv.exe) または SQL Server リレーショナル データベースのエンジン (sqlservr.exe) が過剰なメモリを使用している場合は、この方法により簡単に識別できるほか、システム上の他のプロセスがこの状態に関与していないかどうかも調べられます。その後、状況に応じて修正処置を検討します (たとえば、SQL 管理者にインスタンスのメモリ使用量をチューニングしてもらう、ハードウェアを追加する、マシンのワークロードを軽減/分割するなど)。

解決方法

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

外部資料

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

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

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

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

名前

説明

既定値

重大なしきい値 (%)

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

5

有効

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

はい

アラートを生成する

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

はい

間隔 (秒)

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

900

サンプル数

正常性状態は、しきい値違反数が違反の最小数以上になると変更されます。

4

同期時刻

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

 

タイムアウト (秒)

ワークフローが終了して失敗とマークされるまでの、ワークフローの許容実行時間を指定します。

300

警告のしきい値 (%)

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

10

Element properties:

TargetMicrosoft.SQLServer.2008.AnalysisServices.Instance
Parent MonitorSystem.Health.PerformanceState
CategoryPerformanceHealth
EnabledTrue
Alert GenerateTrue
Alert SeverityError
Alert PriorityNormal
Alert Auto ResolveTrue
Monitor TypeMicrosoft.SQLServer.2008.AnalysisServices.MonitorType.Instance.MemoryUsageByOtherProcessPercent
RemotableTrue
AccessibilityPublic
Alert Message
SSAS 2008: 他のプロセスが割り振ったメモリが多すぎます
合計メモリ制限の設定によって規定されているメモリ量を SSAS で使用できない可能性があります。他のプロセスが割り振ったメモリ ({4} 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.2008.AnalysisServices.UnitMonitor.Instance.MemoryUsageByOtherProcess" 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.MemoryUsageByOtherProcessPercent" ConfirmDelivery="false">
<Category>PerformanceHealth</Category>
<AlertSettings AlertMessage="Microsoft.SQLServer.2008.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/>
<TimeoutSeconds>300</TimeoutSeconds>
</Configuration>
</UnitMonitor>