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.
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.
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:
Der Parameter "Arbeitsspeichergrenze insgesamt" ist in der Konfigurationsdatei falsch festgelegt.
Der insgesamt von anderen Prozessen genutzte Arbeitsspeicher und das vordefinierte Limit für SSAS überschreiten 100 %.
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).
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:
Erhöhen Sie den verfügbaren physischen Speicher auf dem Servercomputer.
Verringern Sie die Belegung durch SSAS-Instanzen oder relationale Datenbankinstanzen, indem Sie den Entwurf ändern. Lesen Sie dazu zunächst das Handbuch zur Leistung mehrdimensionaler SSAS-Datenbanken, oder wenden Sie sich an den Microsoft Support.
Verringern Sie die Belegung durch andere Prozesse durch für den jeweiligen Prozess geeignete Maßnahmen, oder beenden Sie Prozesse, die auf dem Server nicht erforderlich sind.
Planen Sie Aufträge oder Berichte auf den betroffenen Instanzen so, dass gleichzeitige Arbeitsauslastungen während Zeiträumen vermieden werden, zu denen der Serverarbeitsspeicher bereits übermäßig belegt ist.
Ändern Sie die konfigurierten Schwellenwerte für die Warnung, um die Bedingung zu vermeiden.
Deaktivieren Sie den Monitor vollständig, wenn die Speicherauslastung auf dem Server nicht relevant ist.
Ü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)
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 |
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>