Pontos de verificação e a parte ativa do log

Os pontos de verificação liberam páginas de dados sujas do cache do buffer do banco de dados atual para disco. Isso minimiza a parte ativa do log que deve ser processada durante a recuperação completa de um banco de dados. Durante uma recuperação completa, são executados os seguintes tipos de ações:

  • Os registros de log de modificações não liberados para disco antes de o sistema parar são rolados para frente.

  • Todas as modificações associadas a transações incompletas, tais como transações para as quais não há registro de log COMMIT ou ROLLBACK, são revertidas.

Operação de ponto de verificação

Um ponto de verificação executa os seguintes processos no banco de dados:

  • Escreve um registro no arquivo de log, marcando o início do ponto de verificação.

  • Armazena informações registradas para o ponto de verificação em uma cadeia de registros de log de ponto de verificação.

    Uma informação registrada no ponto de verificação é o número de sequência de log (LSN) do primeiro registro de log que deve estar presente para o êxito de uma reversão de todo o banco de dados. Esse LSN é chamado de LSN de recuperação mínima (MinLSN). O MinLSN é o mínimo do:

    • LSN do início do ponto de verificação.

    • LSN do início da transação ativa mais antiga.

    • LSN do início da transação de replicação mais antiga que ainda não foi entregue ao banco de dados de distribuição.

    Os registros de ponto de verificação também contêm uma lista de todas as transações ativas que modificaram o banco de dados.

  • Se o banco de dados usar o modelo de recuperação simples, ele marca para reutilização o espaço que precede o MinLSN.

  • Grava todo o log sujo e páginas de dados no disco.

  • Grava um registro marcando o final do ponto de verificação no arquivo de log.

  • Grava o LSN do início dessa cadeia na página de inicialização de banco de dados.

Atividades que causam um ponto de verificação

Os pontos de verificação ocorrem nas seguintes situações:

  • Uma instrução CHECKPOINT é executada explicitamente. Um ponto de verificação ocorre no banco de dados atual para a conexão.

  • Uma operação de log mínimo é executada no banco de dados; por exemplo, uma operação de cópia em massa é executada em um banco de dados que está usando o modelo de recuperação bulk-logged.

  • Os arquivos de banco de dados foram adicionados ou removidos usando ALTER DATABASE.

  • Uma instância de SQL Server é interrompida por uma instrução SHUTDOWN ou pela interrupção do serviço SQL Server (MSSQLSERVER). Qualquer ação causa um ponto de verificação em cada banco de dados na instância de SQL Server.

  • Uma instância de SQL Server gera periodicamente pontos de verificação automáticos em cada banco de dados para reduzir o tempo que a instância levaria para recuperar o banco de dados.

  • É realizado um backup de banco de dados.

  • É executada uma atividade que requer um desligamento de banco de dados. Por exemplo, AUTO_CLOSE está ON e a última conexão de usuário com o banco de dados está fechada ou é feita uma modificação de opção de banco de dados que requer o reinício do banco de dados.

Pontos de verificação automáticos

O Mecanismo de banco de dados do SQL Server gera pontos de verificação automáticos. O intervalo entre pontos de verificação automáticos baseia-se na quantidade de espaço do log usado e o tempo decorrido desde o último ponto de verificação. O intervalo de tempo entre pontos de verificação automáticos pode ser muito variável e longo se forem feitas algumas modificações no banco de dados. Pontos de verificação automáticos também podem ocorrer com frequência se forem modificados muitos dados.

Use a opção de configuração de servidor intervalo de recuperação para calcular o intervalo entre pontos de verificação automáticos para todos os bancos de dados em uma instância do servidor. Essa opção especifica o tempo máximo que o Mecanismo de Banco de Dados deve usar para recuperar um banco de dados durante um reinício do sistema. O Mecanismo de Banco de Dados calcula quantos registros de log podem ser processados no intervalo de recuperação durante uma operação de recuperação.

O intervalo entre pontos de verificação automáticos também depende do modelo de recuperação:

  • Se o banco de dados estiver usando o modelo de recuperação bulk-logged ou completa, é gerado um ponto de verificação sempre que o número de registros de log atingir o número de estimativas do Mecanismo de Banco de Dados que pode processar durante o tempo especificado na opção intervalo de recuperação.

  • Se o banco de dados estiver usando o modelo de recuperação simples, é gerado um ponto de verificação automático sempre que o número de registros de log atingir o menor destes dois valores:

    • O log se torna 70% completo.

    • O número de registros de log atinge o número de estimativas do Mecanismo de Banco de Dados que pode processar durante o tempo especificado na opção intervalo de recuperação.

Para obter mais informações sobre como configurar o intervalo de recuperação, consulte Como definir o intervalo de recuperação (SQL Server Management Studio).

DicaDica

A opção de configuração avançada -k do SQL Server permite a um administrador de banco de dados acelerar o comportamento de E/S de ponto de verificação com base na taxa de transferência do subsistema de E/S de alguns tipos de pontos de verificação. A opção de configuração -k se aplica a pontos de verificação automáticos e a qualquer ponto de verificação limitado.

Pontos de verificação automáticos truncarão a seção não utilizada do log de transações se o banco de dados estiver usando o modelo de recuperação simples. Contudo, se o banco de dados estiver usando os modelos de recuperação bulk-logged ou completa, o log não será truncado pelos pontos de verificação automáticos. Para obter mais informações, consulte Truncamento de log de transações.

A instrução CHECKPOINT fornece agora um argumento checkpoint_duration opcional que especifica o intervalo de tempo necessário, em segundos, para a conclusão dos pontos de verificação. Para obter mais informações, consulte CHECKPOINT (Transact-SQL).

Log ativo

A seção do arquivo de log desde o MinLSN até o último registro de log gravado é chamada de parte ativa do log ou log ativo. Essa é a seção do log necessária para fazer uma recuperação completa do banco de dados. Nenhuma parte do log ativo pode ter sido truncada. Todos os registros de log devem ser truncados das partes do log antes do MinLSN.

A ilustração seguinte mostra uma versão simplificada de um log de término de uma transação com duas transações ativas. Os registros de ponto de verificação foram compactados em um único registro.

log de final de transação com transações ativas

LSN 148 é o último registro no log de transação. No momento em que o ponto de verificação gravado em LSN 147 foi processado, Tran 1 havia sido confirmada e Tran 2 era a única transação ativa. Isso torna o primeiro registro de log para Tran 2 o registro de log mais antigo para uma transação ativa no momento do último ponto de verificação. Isso torna LSN 142 o registro Iniciar transação para Tran 2, o MinLSN.

Transações de longa execução

O log ativo deve incluir todas as partes de todas as transações não confirmadas. Um aplicativo que inicia uma transação e não a confirma ou reverte-a impede que o Mecanismo de Banco de Dados avance o MinLSN. Isso pode causar dois tipos de problemas:

  • Se o sistema é desligado depois que a transação realizou muitas modificações não confirmadas, a fase de recuperação do reinício subsequente pode demorar muito mais do que o tempo especificado na opção intervalo de recuperação.

  • O log pode ficar muito grande, pois não pode ser truncado além do MinLSN. Isso ocorre mesmo se o banco de dados estiver usando o modelo de recuperação simples, no qual o log de transações é geralmente truncado em cada ponto de verificação automático.

Transações de replicação

O Log Reader Agent monitora o log de transações de cada banco de dados configurado para replicação de transação e copia as transações marcadas para replicação do log de transações no banco de dados de distribuição. O log ativo deve conter todas as transações marcadas para replicação, mas que ainda não foram enviadas ao banco de dados de distribuição. Se essas transações não forem replicadas de maneira oportuna, elas poderão impedir o truncamento do log. Para obter mais informações, consulte Como a replicação transacional funciona.