Speicherauslastung auf dem Server

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

Der Monitor überwacht die Speicherauslastung durch andere Prozesse als Analysis Services-Prozesse auf dem Server, um sicherzustellen, dass das Gesamtspeicherlimit für Analysis Services immer verfügbar ist.

Knowledge Base article:

Zusammenfassung

Die Speicherauslastung auf dem Server, auf dem die SSAS-Instanz gehostet wird, kann die Integrität und Leistung des Servers beeinträchtigen, wenn Konkurrenz um gemeinsam verwendete Ressourcen herrscht, die auch von der Instanz belegt werden müssen. Dies kann zur Auslastung des auf dem Computer verfügbaren physischen Speichers führen. Das Betriebssystem wird dadurch ggf. gezwungen, der Auslagerungsdatei auf dem Datenträger virtuellen Speicher zuzuordnen, der bedeutend langsamer als physischer Speicher ist. Für geschäftskritische Anwendungen, die von einer SSAS-Instanz abhängig sind, muss der Server so konfiguriert sein, dass andere Prozesse (z. B. Antivirensoftware, Datenträgerdefragmentierung, andere Instanzen von SSAS oder dem relationalen SQL Server-Datenbankmodul usw.) nicht übermäßig Speicher belegen und so diesen Umstand herbeiführen.

Ursachen

Zu den häufigsten Prozessen, die mit SSAS-Instanzen maßgeblich um Speicher konkurrieren, gehören in erster Linie andere Instanzen von SSAS sowie das relationale SQL Server-Datenbankmodul bzw. andere Datenbankserver, da es sich bei diesen Prozessen tendenziell um die speicherintensivsten handelt, die auf Servern zusammen mit SSAS gehostet werden. Zuweilen belegt auch andere Software, die nicht mit Datenbanken in Zusammenhang steht, intensiv Speicher. Überlegungen zum Arbeitsspeicher wirken sich daher häufig auf die Konfiguration eines Servers aus.

Darüber hinaus kann der Wert des freien, nicht reservierten Arbeitsspeichers (Parameter FreeUnreservedPercent) negativ werden. Dieser Parameter wird folgendermaßen berechnet: 100 % des Gesamtspeichers abzüglich hoher Speicherauslastung durch die Instanz (SSAS) und abzüglich der Speicherauslastung durch andere Prozesse. Folgende Gründe hierfür sind möglich:

Mit dem Task-Manager kann die Speicherauslastung durch verschiedene Prozesse auf dem Server untersucht werden. Die Registerkarte "Prozesse" in Windows Server 2008 R2 bzw. "Details" in Windows Server 2016 kann nach der Spalte "Arbeitsspeicher" sortiert werden, um die Prozesse mit der höchsten Speicherbelegung auf dem System ausfindig zu machen. Wenn Instanzen von SSAS (msmdsrv.exe) oder dem relationalen SQL Server-Datenbankmodul (sqlservr.exe) übermäßig Speicher belegen, kann deren Belegung auf diese einfache Weise zügig bestimmt werden. Selbstverständlich kann auch überprüft werden, ob möglicherweise andere Prozesse auf dem System zu der Bedingung beitragen. Anschließend werden dann ggf. entsprechende Gegenmaßnahmen formuliert (z. B. Optimieren der Speicherauslastung der Instanzen durch den SQL-Administrator, Hinzufügen von Hardware oder Verringern bzw. Aufteilen der Arbeitsauslastung auf dem Computer).

Lösungen

Um Probleme bei der Gesamtauslastung des Servers lösen zu können, müssen Administratoren zahlreiche Faktoren kennen und berücksichtigen, darunter u. a. Arbeitsauslastungsanforderungen, Benutzer- und Auftragsplanungen, andere geplante Prozesse auf dem Servercomputer und die verfügbaren Ressourcen. Zu den möglichen Gegenmaßnahmen bei übermäßiger Gesamtspeicherbelegung auf dem Servercomputer gehören folgende:

Extern

Überlegungen zur Speicherkonfiguration und Speichergröße in SQL Server 2016

TechNet-Dokumentation zu Analysis Services-Speichereigenschaften

Konfigurieren von Servereigenschaften in Analysis Services

TechNet-Dokumentation zu Leistungsindikatoren (SSAS)

Leitfaden zur Leistung für SSAS (mehrdimensional)

Parameter, die außer Kraft gesetzt werden können

Name

Beschreibung

Standardwert

Kritischer Schwellenwert (%)

Der Integritätsstatus ändert sich in "Kritisch", wenn "Frei, nicht reserviert (%)" unter den Schwellenwert fällt.

5

Aktiviert

Aktiviert oder deaktiviert den Workflow

Ja

Generiert Warnungen

Definiert, ob der Workflow eine Warnung generiert

Ja

Intervall (Sekunden)

Das periodische Intervall in Sekunden, in dem der Workflow ausgeführt werden soll.

900

Anzahl der Stichproben

Der Integritätsstatus ändert sich, wenn die Anzahl der Schwellenwertverletzungen höher als die Mindestanzahl der Verletzungen oder gleich der Mindestanzahl der Verletzungen ist.

4

Synchronisierungszeit

Die in einem 24-Stunden-Format angegebene Synchronisierungszeit. Kann ausgelassen werden.

 

Timeout (Sekunden)

Gibt die Zeit an, die der Workflow ausgeführt werden darf, bevor er geschlossen und als fehlgeschlagen markiert wird.

300

Schwellenwert für Warnung (%)

Der Integritätsstatus ändert sich in "Warnung", wenn der freie nicht reservierte Speicher (%) unter den Schwellenwert fällt, aber noch über dem kritischen Schwellenwert (%) liegt.

10

Element properties:

TargetMicrosoft.SQLServer.2016.AnalysisServices.Instance
Parent MonitorSystem.Health.PerformanceState
CategoryPerformanceHealth
EnabledTrue
Alert GenerateTrue
Alert SeverityError
Alert PriorityNormal
Alert Auto ResolveTrue
Monitor TypeMicrosoft.SQLServer.2016.AnalysisServices.MonitorType.Instance.MemoryUsageByOtherProcessPercent
RemotableTrue
AccessibilityPublic
Alert Message
SSAS 2016: Andere Prozesse haben zu viel Arbeitsspeicher zugeordnet.
Die durch die Einstellung des Gesamtspeicherlimits vorgeschriebene Speichermenge ist möglicherweise nicht für SSAS verfügbar, da andere Prozesse zu viel Speicher belegen ({4} GB).
Gesamtspeicher auf dem Server: {2} GB
Insgesamt verwendeter Speicher: {5} GB
Von Nicht-SSAS-Prozessen verwendeter Speicher: {4} GB
Von SSAS verwendeter Speicher: {3} GB
Unteres SSAS-Speicherlimit: {6} GB ({7}\%)
Oberes SSAS-Speicherlimit: {0} GB ({8}\%)
RunAsDefault

Source Code:

<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>