Garbage Collection

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

Il monitoraggio segnala uno stato Critico e genera un avviso se la quantità di spazio usata dalle righe attive in tutti i file di dati con ottimizzazione per la memoria scende sotto l'impostazione della soglia, espressa come percentuale delle dimensioni dei file di dati. Nota: per impostazione predefinita, questo monitoraggio è disabilitato. Usare gli override per abilitarlo quando necessario.

Knowledge Base article:

Riepilogo

Questo monitoraggio segnala uno stato Critico e genera un avviso se il fattore di riempimento del Garbage Collector, ovvero una quantità di spazio usata dalle righe attive nei file di dati con ottimizzazione per la memoria, espressa come percentuale delle dimensioni dei file di dati, scende sotto l'impostazione della soglia.

Il fattore di riempimento di Garbage Collection per il filegroup di dati con ottimizzazione per la memoria rappresenta la metrica che mostra il fattore di riempimento medio tra tutti i file di dati/differenziali attivi contenenti le righe inserite/eliminate. Se questa metrica è inferiore al 50%, indica che l'unione automatica è rimasta indietro. Ciò non rappresenta un problema immediato purché il numero di coppie di file di checkpoint rimanga al di sotto di 8000 e lo spazio di archiviazione disponibile nel filegroup di dati con ottimizzazione per la memoria sia più che sufficiente.

Nota: per impostazione predefinita, questo monitoraggio è disabilitato. Usare gli override per abilitarlo quando necessario.

Altre informazioni sono disponibili nella documentazione sys.dm_db_xtp_checkpoint_files (Transact-SQL)

http://go.microsoft.com/fwlink/?LinkId=799285

La sezione relativa al funzionamento di Garbage Collection è disponibile dell'argomento "Creazione e gestione dell'archiviazione per gli oggetti con ottimizzazione per la memoria"

http://go.microsoft.com/fwlink/?LinkId=799286

Cause

L'unione delle coppie di file di checkpoint viene avviata in base ai criteri di unione interni. Per informazioni dettagliate, vedere questo articolo.

Soluzioni

Eseguire un'unione manuale e forzare il processo di Garbage Collection come descritto negli articoli seguenti:

.

Parametri di cui è possibile eseguire l'override

Nome

Descrizione

Valore predefinito

Priorità avviso

Definisce la priorità dell'avviso.

Normale

Gravità avviso

Definisce la gravità dell'avviso.

Errore

Abilitato

Abilita o disabilita il flusso di lavoro.

No

Genera avvisi

Definisce se il flusso di lavoro genera un avviso.

Intervallo (secondi)

Intervallo di tempo ricorrente in secondi in cui eseguire il flusso di lavoro.

900

Ritardo script (millisecondi)

Questo parametro imposta il ritardo tra le query T-SQL consecutive eseguite dal flusso di lavoro. Favorisce la riduzione del footprint generato dal flusso di lavoro in presenza di un numero elevato di oggetti di destinazione. Prima di cambiare questo parametro, consultare il Supporto tecnico Microsoft.

0

Ora di sincronizzazione

Ora di sincronizzazione specificata usando il formato a 24 ore. Può essere omessa.

00:05

Soglia

Il valore raccolto verrà confrontato con questo parametro.

50

Timeout (secondi)

Specifica il tempo di esecuzione consentito per il flusso di lavoro prima che venga chiuso e contrassegnato come non riuscito.

300

Element properties:

TargetMicrosoft.SQLServer.2016.DBFileGroupFx
Parent MonitorSystem.Health.PerformanceState
CategoryPerformanceHealth
EnabledFalse
Alert GenerateTrue
Alert SeverityError
Alert PriorityNormal
Alert Auto ResolveTrue
Monitor TypeMicrosoft.SQLServer.2016.MonitorType.DBFileGroupFx.GarbageCollectionState
RemotableTrue
AccessibilityPublic
Alert Message
MSSQL 2016: Il fattore di riempimento della Garbage Collection dei dati con ottimizzazione per la memoria è troppo basso
Il fattore di riempimento medio per tutti i file di dati/differenziali ATTIVI contenenti righe inserite/eliminate è troppo basso.
Server: {1}
Istanza di SQL Server: {0}
Database: {2}
Filegroup: {3}
Fattore di riempimento: {4} \%
RunAsDefault

Source Code:

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