Freigeben über


Background Task: Checkpoint Process

Checkpoint process é uma tarefa realizada periodicamente em todos os bancos de dados para manter as informações sincronizadas entre os arquivos de Dados e Log. É importante lembrar que as escritas de dados são realizadas de forma assíncrona, ou seja, os comandos de UPDATE, INSERT e DELETE alteram os dados em memória (apesar de manter os registros em Log). Posteriormente, os dados são descarregados para disco.

Muitas pessoas confundem o Checkpoint process com o Lazy Writer, que também é um processo rodando em background para escrita de dados em disco. Lazy Writer atua somente em caso de falta de memória para toda a instância SQL, sendo considerado uma tarefa que auxilia no controle do Buffer Pool. Dependendo da quantidade de memória no servidor, o Lazy Writer pode ficar ocioso por um longo tempo.

O Checkpoint process está relacionado com a recuperação rápida do banco de dados após o reboot, que corresponde ao Database Recovery. É responsabilidade do checkpoint garantir que os arquivos de Dados e Log estão sincronizadas. As informações antigas de logs, então, não precisam ser utilizadas e podem ser apagadas. Muitas pessoas tem problema de falta de espaço em disco no arquivo de log. O processo de checkpoint é essencial para liberar as informações no Log, permitindo que o arquivo seja truncado e o espaço seja reutilizado.

 

Referências

SQL Books Online: Checkpoints and the Active Portion of the Log
https://msdn.microsoft.com/en-us/library/ms189573.aspx

Paul Randal: How do checkpoints work and what gets logged
https://www.sqlskills.com/BLOGS/PAUL/post/How-do-checkpoints-work.aspx

Comments

  • Anonymous
    October 28, 2010
    Fabricio, boa tarde. Eu tenho uma duvida. O Lazy Write apenas é executado quando o servidor está sofrendo pressão de memória certo? Caso contrário ele fica ocioso e não executa. Minha duvida é: Qual processo que tira as paginas da memória quando estamos com esse cenário? Abs

  • Anonymous
    October 29, 2010
    Olá Thiago! Enquanto o servidor estiver tranquilo e sem pressão de memória, as páginas são mantidas em memória. Dessa forma, elas poderão ser usadas no futuro. Outro motivo é que retirar as páginas da memória significa que será zerada e marcada como Memória Livre. Mas como não há consumidor de memória, essa memória livre ficará sem uso. Um banco de dados 100% em memória não depende do Lazy Writer. Nesse caso, periodicamente ocorrem checkpoints de gravação para sincronizar os dados e log. Se você puder dar mais detalhes sobre o cenário, podemos conversar mais sobre o funcionamento do Lazy Writer e Checkpoint. Abraços, Fabricio

  • Anonymous
    November 17, 2010
    Fabricio, Boa tarde. Deixa eu ver se entendi! Que dizer se um servidor não some pressão de memória os dados sempre ficam em cache. E o unico processo que sincroniza os dados para o disco é o checkpoint? Porque estou perguntando isso? Estive avaliando alguns contadores do perfmon de um server aqui da empresa e percebi que no objeto SQL Server:Buffer Manager o contador Lazy Write/Sec apenas fica zerado. E o SQL Server: Buffer Manager Page Life Expectancy permance em 91084. Isso é um bom sinal certo? Abs

  • Anonymous
    November 18, 2010
    Olá Thiago! É 100% verdade. Se o Lazy Writer está zerado, então não há escrita de páginas sujas para disco. Como o Page Life Expectancy se mantem alto (91084 segundos), então seu servidor está tranquilo em relação a memória. Esse é o primeiro sinal indicando que quase tudo está em memória! Há alguns contadores importantes como Buffer Manager: Reads/sec, que vão garantir que seu servidor está MUITO tranquilo. Obrigado pelo comentário... interessante... escreverei algo sobre o assunto! Abraços, Fabricio

  • Anonymous
    August 25, 2012
    Boa tarde Fabrício, que manifestar minha grande satisfação em ler seus posts, eles são muito interessantes e enriquecem muito meu coinhecimento e me ajudam no dia-a-adia. Parabens pelo trabalho! Abs

  • Anonymous
    August 26, 2012
    Obrigado! Depois desse comentário, vou voltar a escrever mais no blog!!! :)