モニターは、サーバー上で Analysis Services プロセス以外のプロセスが使用しているメモリ量を監視し、Analysis Services で合計メモリ制限が常に使用できるようにします。
SSAS インスタンスをホストするサーバー上のメモリ使用量は、インスタンスも割り振りを受ける必要のある共有リソースと競合するため、サーバーの正常性とパフォーマンスに影響を与えることがあります。これは、コンピューターで使用可能な物理メモリを使い尽くす結果になることがあり、その場合はオペレーティング システムが仮想メモリをディスク上のページ ファイルにマップする必要が生じるため、物理メモリより桁違いに低速になります。ビジネスに不可欠なアプリケーションが SSAS インスタンスに依存している場合は、この状況になるのを防止するために、他のプロセス (たとえば、ウイルス対策、ディスクの最適化、SSAS の他のインスタンス、SQL Server のリレーショナル データベース エンジンなど) が過剰なメモリ割り当てを受けることがないようにサーバーを構成する必要があります。
SSAS インスタンスとメモリを競合することの多いプロセスには、SSAS の他のインスタンス、SQL Server のリレーショナル データベース エンジン、他のデータベース サーバーなどがあります。これらのプロセスは、SSAS そのものがホストされているサーバー上のメモリを大量に使用するからです。もちろん、データベース以外のソフトウェアがメモリを大量に使用することもあります。このため、メモリの考慮事項がサーバーの構成に影響を与えるケースが多くなっています。
さらに、予約されていない空きメモリ (FreeUnreservedPercent パラメーター) の値がマイナスになっている可能性があります。このパラメーターは、次のように計算されます。合計メモリの 100% から、インスタンス (SSAS) によって使用される高いメモリ使用量を差し引き、その他のプロセスによるメモリ使用量を差し引きます。結果は次のようになります。
構成ファイルで合計メモリ制限パラメーターが不適切に設定されています
他のプロセスによって使用されるメモリの合計と SSAS に対して事前に設定された制限が 100% を超えています
タスク マネージャーを使用して、サーバー上のさまざまなプロセスによるメモリ使用を分析できます。Windows Server 2008 R2 の [プロセス] タブ、または Windows Server 2016 の [詳細] タブで、[メモリ] の列でソートすると、システム上でメモリを最も多く消費しているプロセスを確認できます。SSAS (msmdsrv.exe) または SQL Server リレーショナル データベース エンジン (sqlservr.exe) のインスタンスが過度にメモリを消費している場合、その使用状況をすばやく簡単に確認し、システム上の別のプロセスもこれに関与しているかどうかを知ることもできます。その後、必要に応じて是正措置 (SQL 管理者によるインスタンスのメモリ使用の調整、ハードウェアの追加、またはマシンのワークロードの低減や分割など) を行うことができます。
サーバーの総合的な使用状況の問題を解決するには、ワークロードの要件、ユーザーおよびジョブのスケジュール、サーバー コンピューター上のその他のスケジュールされたプロセス、および使用可能なリソースなど (これらに限定されません)、数多くの要因を管理者が理解し、検討する必要があります。サーバー コンピューター上のメモリ割り当ての合計サイズが過剰になる状態を軽減するには、次のいずれかの処置が役立つことがあります。
サーバー コンピューター上で利用可能な物理メモリを増やします。
「SSAS 多次元パフォーマンス ガイド」を参照した後、または Microsoft サポートに相談した後に、設計を変更することにより、SSAS インスタンスまたはリレーショナル データベース インスタンスによる消費を減らします。
それぞれのプロセスに固有の手段を使って他のプロセスによる消費量を減らすか、サーバー上で必要のないプロセスを終了します。
影響を受けるインスタンス上のジョブやレポートをスケジュールして、サーバー メモリが過度に割り当てられるような同時ワークロードを回避します。
アラートの構成されたしきい値を調整して、その条件を回避します。
メモリ使用量がサーバーで問題にならなければ、モニターを完全に無効にします。
SQL Server 2016 でのメモリ構成とサイズ変更の考慮事項
Analysis Services メモリのプロパティに関する TechNet 資料
Analysis Services でのサーバーのプロパティの構成
SSAS パフォーマンス カウンターに関する TechNet 資料
名前 | 説明 | 既定値 |
重大なしきい値 (%) | 正常性状態は、予約されていない空き領域 (%) がしきい値を下回ると重大に変更されます。 | 5 |
有効 | ワークフローを有効または無効にします | はい |
アラートを生成する | ワークフローがアラートを生成するかどうかを定義する | はい |
間隔 (秒) | ワークフローを実行する定期的な実行間隔 (秒)。 | 900 |
サンプル数 | 正常性状態は、しきい値違反数が違反の最小数以上になると変更されます。 | 4 |
同期時刻 | 24 時間形式で指定した同期時刻。省略可能です。 |
|
タイムアウト (秒) | ワークフローが終了して失敗とマークされるまでの、ワークフローの許容実行時間を指定します。 | 300 |
警告のしきい値 (%) | 正常性状態は、予約されていない空き領域 (%) がしきい値を下回るものの、重大しきい値 (%) よりも高い場合に警告に変更されます。 | 10 |
Target | Microsoft.SQLServer.2016.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.2016.AnalysisServices.MonitorType.Instance.MemoryUsageByOtherProcessPercent | ||
Remotable | True | ||
Accessibility | Public | ||
Alert Message |
| ||
RunAs | Default |
<UnitMonitor ID="Microsoft.SQLServer.2016.AnalysisServices.UnitMonitor.Instance.MemoryUsageByOtherProcess" Accessibility="Public" Enabled="true" Target="SQLAS!Microsoft.SQLServer.2016.AnalysisServices.Instance" ParentMonitorID="SystemHealth!System.Health.PerformanceState" Remotable="true" Priority="Normal" TypeID="Microsoft.SQLServer.2016.AnalysisServices.MonitorType.Instance.MemoryUsageByOtherProcessPercent" ConfirmDelivery="false">
<Category>PerformanceHealth</Category>
<AlertSettings AlertMessage="Microsoft.SQLServer.2016.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>