Garbage Collection

Microsoft.SQLServer.2014.Monitor.DBFileGroupFx.GarbageCollectionState (UnitMonitor)

Der Monitor gibt einen kritischen Status und eine Warnung aus, wenn der von aktiven Reihen belegte Platz in In-Memory-Datendateien unter den eingestellten Schwellenwert in Prozent der Größe der Datendateien aus.

Knowledge Base article:

Zusammenfassung

Dieser Monitor gibt einen kritischen Status und eine Warnung aus, wenn der Garbage Collector-Füllfaktor (der von aktiven Reihen belegte Platz in In-Memory-Datendateien in Prozent der Größe der Datendateien) unter den eingestellten Schwellenwert fällt.

Beim Garbage Collection-Füllfaktor für arbeitsspeicheroptimierten Datendateigruppen handelt es sich um die Metrik, mit der der durchschnittliche Füllfaktor für alle aktiven Daten-/Deltadateien, welche eingefügte/gelöschte Zeilen enthalten. Wenn diese Metrik unter 50 % liegt, deutet dies auf eine zu langsame automatische Zusammenführung hin. Dies ist nicht unmittelbar problematisch, solange die Anzahl der CFPs (Prüfpunktdateipaare) unter 8000 liegt und in der optimierten In-Memory-Dateigruppe noch viel Speicher zur Verfügung steht.

Weitere Informationen finden Sie in der Dokumentation unter sys.dm_db_xtp_checkpoint_files (Transact-SQL)

http://msdn.microsoft.com/library/dn133201%28v=sql.120%29.aspx

Den Abschnitt "So funktioniert die Garbage Collection" finden Sie unter dem Thema "Erstellen und Verwalten von Speicher für arbeitsspeicheroptimierte Objekte"

http://msdn.microsoft.com/library/dn133174%28v=sql.120%29.aspx

Ursachen

Die CFP-Zusammenführung wird auf Basis einer internen Zusammenführungsrichtlinie ausgelöst. Weitere Informationen finden Sie im Artikel this article.

Lösungen

Führen Sie eine manuelle Zusammenführung und erzwingen Sie eine Garbage Collection wie in diesen Artikeln beschrieben durch:

.

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.

50

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.DBFileGroupFx
Parent MonitorSystem.Health.PerformanceState
CategoryPerformanceHealth
EnabledTrue
Alert GenerateTrue
Alert SeverityError
Alert PriorityNormal
Alert Auto ResolveTrue
Monitor TypeMicrosoft.SQLServer.2014.MonitorType.DBFileGroupFx.GarbageCollectionState
RemotableTrue
AccessibilityPublic
Alert Message
MSSQL 2014: Füllfaktor für In-Memory-Garbage Collection zu niedrig
Der durchschnittliche Füllfaktor für alle AKTIVEN Daten-/Deltadateien, die eingefügte/gelöschte Zeilen enthalten, ist zu niedrig.
Server: {1}
SQL Server-Instanz: {0}
Datenbank: {2}
Dateigruppe: {3}
Füllfaktor: {4} \%
RunAsDefault

Source Code:

<UnitMonitor ID="Microsoft.SQLServer.2014.Monitor.DBFileGroupFx.GarbageCollectionState" Target="SQL2014Core!Microsoft.SQLServer.2014.DBFileGroupFx" ParentMonitorID="SystemHealth!System.Health.PerformanceState" TypeID="Microsoft.SQLServer.2014.MonitorType.DBFileGroupFx.GarbageCollectionState" Accessibility="Public" Enabled="true" Remotable="true" Priority="Normal" ConfirmDelivery="true">
<Category>PerformanceHealth</Category>
<AlertSettings AlertMessage="Microsoft.SQLServer.2014.Monitor.DBFileGroupFx.GarbageCollectionState.AlertMessage">
<AlertOnState>Error</AlertOnState>
<AutoResolve>true</AutoResolve>
<AlertPriority>Normal</AlertPriority>
<AlertSeverity>Error</AlertSeverity>
<AlertParameters>
<AlertParameter1>$Target/Host/Host/Property[Type="SQL2014Core!Microsoft.SQLServer.2014.ServerRole"]/InstanceName$</AlertParameter1>
<AlertParameter2>$Target/Host/Host/Host/Property[Type="Windows!Microsoft.Windows.Computer"]/NetworkName$</AlertParameter2>
<AlertParameter3>$Target/Host/Property[Type="SQL2014Core!Microsoft.SQLServer.2014.Database"]/DatabaseName$</AlertParameter3>
<AlertParameter4>$Target/Property[Type="SQL2014Core!Microsoft.SQLServer.2014.FileGroup"]/GroupName$</AlertParameter4>
<AlertParameter5>$Data/Context/Property[@Name='StorageUsageFillFactor']$</AlertParameter5>
</AlertParameters>
</AlertSettings>
<OperationalStates>
<OperationalState ID="Critical" MonitorTypeStateID="Critical" HealthState="Error"/>
<OperationalState ID="Success" MonitorTypeStateID="Success" 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>
<DatabaseName>$Target/Host/Property[Type="SQL2014Core!Microsoft.SQLServer.2014.Database"]/DatabaseName$</DatabaseName>
<Value>Property[@Name='StorageUsageFillFactor']</Value>
<Threshold>50</Threshold>
<TimeoutSeconds>300</TimeoutSeconds>
<ScriptDelayMsec>0</ScriptDelayMsec>
</Configuration>
</UnitMonitor>