Coleta de Lixo

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

O monitor relatará um Estado Crítico e emitirá um alerta se a quantidade de espaço usado por linhas ativas nos arquivos de Dados com Otimização de Memória cair abaixo da configuração de Limite, expresso como percentual do tamanho dos arquivos de dados. Observação: este monitor é desabilitado por padrão. Use substituições para habilitá-lo quando necessário.

Knowledge Base article:

Resumo

Este monitor relatará um Estado Crítico e emitirá um alerta se o Fator de preenchimento do coletor de lixo (uma quantidade de espaço usado por linhas ativas nos arquivos de dados com otimização de memória, expresso como percentual do tamanho dos arquivos de dados) cair abaixo da configuração de Limite.

O fator de preenchimento da coleta de lixo para o grupo de arquivos de dados com otimização de memória é a métrica que mostra o fator de preenchimento médio em todos os arquivos de dados/delta ativos contendo linhas inseridas/excluídas. Se essa métrica for menor que 50%, isso indicará que a mesclagem automática está atrasada. Isso não é uma causa imediata de preocupação porque o número de CFPs (pares de arquivo de ponto de verificação) está abaixo de 8.000 e você tem muito armazenamento disponível no Grupo de Arquivos de Dados com Otimização de Memória.

Observação: este monitor é desabilitado por padrão. Use substituições para habilitá-lo quando necessário.

Mais informações podem ser encontradas na documentação sys.dm_db_xtp_checkpoint_files (Transact-SQL)

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

A seção 'Como a Coleta de Lixo funciona' pode ser encontrada no tópico 'Criar e Gerenciar Armazenamento para Objetos Otimizados em Memória'

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

Causas

A mesclagem do CFP é iniciada com base em uma política de mesclagem interna. Consulte esse artigo para obter detalhes.

Resoluções

Realize uma mesclagem manual e force a coleta de lixo conforme descrito nesses artigos:

.

Parâmetros Substituíveis

Nome

Descrição

Valor padrão

Prioridade do Alerta

Define a Prioridade do Alerta.

Normal

Severidade do Alerta

Define a Severidade do Alerta.

Erro

Habilitado

Habilita ou desabilita o fluxo de trabalho.

Não

Gerar Alertas

Define se o fluxo de trabalho gera um Alerta.

Sim

Intervalo (segundos)

O intervalo de tempo recorrente em segundos no qual executa-se o fluxo de trabalho.

900

Atraso do Script (milissegundos)

Este parâmetro define o atraso entre as consultas T-SQL consecutivas executadas pelo fluxo de trabalho. Isso pode ajudar a reduzir a pegada gerada pelo fluxo de trabalho em caso de um grande número de objetos de destino. Consulte o Suporte da Microsoft antes de alterar esse parâmetro.

0

Hora da Sincronização

A hora da sincronização especificada usando um formato de 24 horas. Pode ser omitido.

00:05

Limite

O valor coletado será comparado com esse parâmetro.

50

Tempo Limite (segundos)

Especifica o tempo que o fluxo de trabalho pode funcionar antes de ser fechado e marcado como com falha.

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: o fator de preenchimento da coleta de lixo de dados com otimização de memória está muito baixo
O fator de preenchimento médio em todos os arquivos delta/de dados ATIVOS contendo linhas inseridas/excluídas está muito baixo.
Servidor: {1}
Instância do SQL Server: {0}
Banco de dados: {2}
Grupo de Arquivos: {3}
Fator de Enchimento: {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>