Arbeitsspeichernutzung durch den Ressourcenpool

Microsoft.SQLServer.2014.Monitor.UserResourcePool.MemoryConsumption (UnitMonitor)

Der Monitor gibt einen kritischen Status und eine Warnung aus, wenn die vom Ressourcenpool genutzte Speichermenge den eingestellten Schwellenwert übersteigt. Diese wird in Prozent des verfügbaren Speichers für In-Memory-Tabellen für den entsprechenden Ressourcenpool angegeben.

Knowledge Base article:

Zusammenfassung

Der Monitor gibt einen kritischen Status und eine Warnung aus, wenn die vom Ressourcenpool genutzte Speichermenge den eingestellten Schwellenwert übersteigt. Diese wird in Prozent des verfügbaren Speichers für In-Memory-Tabellen für den entsprechenden Ressourcenpool angegeben.

Wenn der benannte Ressourcenpool einer speicheroptimierten Datenbank zugewiesen wird, verfolgt dieser den Arbeitsspeicher, der allen speicheroptimierten Tabellen, darunter internen, für verschiedene Strukturen innerhalb der In-Memory-OLTP-Engine verwendeten Tabellen, zugewiesen wurde.

Ursachen

Die Speichernutzung durch SQL Server-In-Memory-OLTP unterscheidet sich von der Arbeitsspeichernutzung durch SQL Server. Es kann vorkommen, dass die von Ihnen installierte und für In-Memory-OLTP zugewiesene Speichermenge Ihren gestiegenen Anforderungen nicht mehr entspricht. In diesem Fall könnte Ihnen der Arbeitsspeicher ausgehen.

Weitere Informationen finden Sie in folgendem Artikel:  Binden einer Datenbank mit speicheroptimierten Tabellen an einen Ressourcenpool.

Lösungen

Um die Bedingung "zu wenig Arbeitsspeicher" oder "fehlender Speicher" zu beheben, müssen Sie entweder vorhandenen Speicherplatz durch Einschränkung der Nutzung freigeben oder mehr Speicher für die In-Memory-Tabellen zur Verfügung stellen. Mögliche Korrekturmaßnahmen sind:

Extern

So verwalten Sie Ihren Arbeitsspeicher für In-Memory-OLTP

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

Name

Beschreibung

Standardwert

Aktiviert

 

Ja

Generiert Warnungen

 

Ja

Intervall (Sekunden)

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

900

Skriptverzögerung (Millisekunden)

Über diesen Parameter wird die Verzögerung zwischen aufeinanderfolgenden T-SQL-Abfragen festgelegt, die durch den Workflow ausgeführt werden. Dadurch lässt sich die Ressourcenbeanspruchung durch diesen Workflow bei einer großen Anzahl an Zielobjekten reduzieren. Halten Sie Rücksprache mit dem Microsoft-Support, bevor Sie diesen Parameter ändern.

0

Synchronisierungszeit

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

 

Schwellenwert

Der ermittelte Wert wird mit diesem Parameter verglichen.

90

Timeout (Sekunden)

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

300

Element properties:

TargetMicrosoft.SQLServer.2014.UserResourcePool
Parent MonitorSystem.Health.PerformanceState
CategoryPerformanceHealth
EnabledTrue
Alert GenerateTrue
Alert SeverityError
Alert PriorityNormal
Alert Auto ResolveTrue
Monitor TypeMicrosoft.SQLServer.2014.MonitorType.UserResourcePool.MemoryConsumption
RemotableTrue
AccessibilityPublic
Alert Message
MSSQL 2014: In-Memory-OLTP: Ressourcenpool verwendet zu viel Arbeitsspeicher.
Ressourcenpool "{0}" verwendet zu viel Arbeitsspeicher.
Physischer Arbeitsspeicher auf dem Server insgesamt: {6} MB
Zielarbeitsspeicher für SQL-Instanz: {1} MB
Poolarbeitsspeicher: {2} MB
Verfügbar für In-Memory-Tabellen: {3} MB ({4} \%)
Derzeit verwendet: {5} MB
RunAsDefault

Source Code:

<UnitMonitor ID="Microsoft.SQLServer.2014.Monitor.UserResourcePool.MemoryConsumption" Target="SQL2014Core!Microsoft.SQLServer.2014.UserResourcePool" ParentMonitorID="SystemHealth!System.Health.PerformanceState" TypeID="Microsoft.SQLServer.2014.MonitorType.UserResourcePool.MemoryConsumption" Accessibility="Public" Enabled="true" Remotable="true" Priority="Normal" ConfirmDelivery="true">
<Category>PerformanceHealth</Category>
<AlertSettings AlertMessage="Microsoft.SQLServer.2014.Monitor.UserResourcePool.MemoryConsumption.AlertMessage">
<AlertOnState>Error</AlertOnState>
<AutoResolve>true</AutoResolve>
<AlertPriority>Normal</AlertPriority>
<AlertSeverity>Error</AlertSeverity>
<AlertParameters>
<AlertParameter1>$Target/Property[Type="SQL2014Core!Microsoft.SQLServer.2014.ResourcePool"]/Name$</AlertParameter1>
<AlertParameter2>$Data/Context/Property[@Name='MemoryForSQLInstanceMB']$</AlertParameter2>
<AlertParameter3>$Data/Context/Property[@Name='PoolAvailableMemoryMB']$</AlertParameter3>
<AlertParameter4>$Data/Context/Property[@Name='PoolFreeMemoryMB']$</AlertParameter4>
<AlertParameter5>$Data/Context/Property[@Name='PoolFreeMemoryPercent']$</AlertParameter5>
<AlertParameter6>$Data/Context/Property[@Name='PoolUsedMemoryMB']$</AlertParameter6>
<AlertParameter7>$Data/Context/Property[@Name='TotalMemoryOnTheServerMB']$</AlertParameter7>
</AlertParameters>
</AlertSettings>
<OperationalStates>
<OperationalState ID="ErrorState" MonitorTypeStateID="ErrorState" HealthState="Error"/>
<OperationalState ID="SuccessState" MonitorTypeStateID="SuccessState" HealthState="Success"/>
</OperationalStates>
<Configuration>
<IntervalSeconds>900</IntervalSeconds>
<SyncTime/>
<ServerName>$Target/Host/Host/Host/Property[Type="Windows!Microsoft.Windows.Computer"]/NetworkName$</ServerName>
<SqlInstanceName>$Target/Host/Host/Property[Type="SQL2014Core!Microsoft.SQLServer.2014.ServerRole"]/InstanceName$</SqlInstanceName>
<Value>Property[@Name='PoolUsedMemoryPercent']</Value>
<PoolID>$Target/Property[Type="SQL2014Core!Microsoft.SQLServer.2014.ResourcePool"]/PoolID$</PoolID>
<Threshold>90</Threshold>
<TimeoutSeconds>300</TimeoutSeconds>
<ScriptDelayMsec>0</ScriptDelayMsec>
</Configuration>
</UnitMonitor>