Nossa solução de monitoramento (SCOM) está sinalizando que o log tempdb está ficando sem espaço. No entanto, temos o crescimento automático definido para pedaços de 1 GB para o log e temos 25 GB de espaço na unidade.
Eu olhei para o que log_reuse_wait_desc
era e descobri que eraACTIVE_TRANSACTION
Comecei a me perguntar se, por algum motivo, o arquivo de log estava sendo preenchido e o crescimento automático não estava funcionando, e depois de algumas pesquisas descobri que o arquivo de log ainda deveria crescer mesmo durante um ACTIVE_TRANSACTION
.
Encontrei um artigo sobre problemas semelhantes em que o log do tempdb ficou sem espaço:
Aqui eles emitiram um CHECKPOINT
para resolver o problema em tempdb
. Eu sei que um CHECKPOINT
libera páginas sujas para o disco, mas não entendo como isso resolveria o ACTIVE_TRANSACTION
problema?
Além disso, também não sei por que recebemos esse alerta quando há muito espaço. Existe uma situação em que o tempdb
preenchimento e o crescimento automático não funcionam por algum motivo?
Como Max mencionou, o alerta provavelmente foi disparado pouco antes do crescimento do log/precisando crescer. O SCOM coleta % de espaço livre no log de transações, embora eu não tenha certeza de qual limite o alerta será acionado.
aqui está um exemplo rápido para mostrar em que estado o tempdb provavelmente está quando você recebe esses alertas, mas não há crescimento do arquivo de log.
primeiro crie um banco de dados, defina a recuperação como completa e faça backup
agora mude para esse banco de dados, crie uma tabela e execute DBCC sqlperf(logspace) para verificar o tamanho e o espaço livre em seu arquivo de log.
No meu sistema, tenho o tamanho do arquivo de log de 0,9921875 e o espaço de log usado (%) de 48,4245. Agora insira alguns dados na tabela e execute DBCC sqlperf(logspace) novamente. No meu sistema, 45 linhas inseridas deram os resultados desejados (o número de linhas inseridas pode precisar ser ajustado).
Desta vez, a saída do DBCC sqlperf deve mostrar que o tamanho do log é o mesmo, mas o espaço de log usado está um pouco abaixo de 100%. Nesse caso, o SCOM provavelmente dispararia um alerta de que o espaço de log está baixo. Não há mais atividade em andamento para fazer com que o arquivo de log cresça e (neste exemplo) nenhum backup de tlog para liberar espaço usado. O tempdb está em recuperação simples, portanto, sua transação ativa provavelmente usou a maior parte do espaço disponível e não o liberou, mas não havia atividade suficiente no tempdb para acionar o crescimento do arquivo de log, causando o disparo do alerta.
limpar banco de dados quando terminar
Isso não responde à sua pergunta, mas achei que seria útil ver se houve algum crescimento de log recente: