モニターは、サーバー上で Analysis Services プロセス以外のプロセスが使用しているメモリ量を監視し、Analysis Services で TotalMemoryLimit が常に使用できるようにします。
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 管理者によるインスタンスのメモリ使用量の調整、ハードウェアの追加、コンピューター上のワークロードの減少や分割といった是正措置を適宜考案することができます。
サーバーの総合的な使用状況の問題を解決するには、ワークロードの要件、ユーザーおよびジョブのスケジュール、サーバー コンピューター上のその他のスケジュールされたプロセス、および使用可能なリソースなど (これらに限定されません)、数多くの要因を管理者が理解し、検討する必要があります。サーバー コンピューター上のメモリ割り当ての合計サイズが過剰になる状態を軽減するには、次のいずれかの処置が役立つことがあります。
サーバー コンピューター上で利用可能な物理メモリを増やします。
『SSAS 多次元パフォーマンス ガイド』を参照した後、または Microsoft サポートに相談した後に、設計を変更することにより、SSAS インスタンスまたはリレーショナル データベース インスタンスによる消費を減らします。
それぞれのプロセスに固有の手段を使って他のプロセスによる消費量を減らすか、サーバー上で必要のないプロセスを終了します。
影響を受けるインスタンス上のジョブやレポートをスケジュールして、サーバー メモリが過度に割り当てられるような同時ワークロードを回避します。
アラートの構成されたしきい値を調整して、その条件を回避します。
メモリ使用量がサーバーで問題にならなければ、モニターを完全に無効にします。
SQL Server 2014 でのメモリ構成とサイズ変更の考慮事項
Analysis Services メモリのプロパティに関する TechNet 資料
Analysis Services でのサーバーのプロパティの構成
SSAS パフォーマンス カウンターに関する TechNet 資料
名前 | 説明 | 既定値 |
重大なしきい値 (%) | 正常性状態は、予約されていない空き領域 (%) がしきい値を下回ると重大に変更されます。 | 5 |
有効 | ワークフローを有効または無効にします | True |
アラートを生成する | ワークフローがアラートを生成するかどうかを定義する | True |
間隔 (秒) | ワークフローを実行する定期的な実行間隔 (秒)。 | 900 |
同期時刻 | 24 時間形式で指定した同期時刻。省略可能です。 | 4 |
警告しきい値 (%) | 正常性状態は、予約されていない空き領域 (%) がしきい値を下回り、同時に重大なしきい値 (%) よりも高い場合に警告に変更されます。 |
|
Target | Microsoft.SQLServer.2014.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.2014.AnalysisServices.MonitorType.Instance.MemoryUsageByOtherProcessPercent | ||
Remotable | True | ||
Accessibility | Public | ||
Alert Message |
| ||
RunAs | Default |
<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>