2.7 - Ponto de confirmação de uma transação
Além do ponto de confirmação, a transação é considerada confirmada, e seu efeito deve ser registrado permanentemente no banco de dados. A transação então grava um registro de confirmação COMMIT no log. Se houver uma falha no sistema, podemos pesquisar de volta no log para todas as transações que gravaram um registro (start_transaction) no log, mas ainda não gravaram seu registro commit. Essas transações podem ter de ser descartadas (rollback) para desfazer seu efeito sobre o banco de dados durante o processo de recuperação.
As transações que gravaram seu registro de confirmação no log também devem ter gravado todas as suas operações WRITE no log, de modo que seu efeito no banco de dados possa ser refeito com base nos registros de log.
|
Observe que o arquivo de log precisa ser mantido no disco. A atualização de um arquivo do disco envolve copiar o bloco apropriado do arquivo para um buffer na memória principal, atualizar o buffer na memória principal e copiar o buffer para o disco.
|
É comum manter um ou mais blocos do arquivo de log nos buffers da memória principal, chamado buffer de log, até que eles sejam preenchidos com entradas de log e, depois, gravá-los de volta ao disco apenas uma vez, ao invés de gravar em disco toda vez que uma entrada de log é acrescentada. Isso economiza o overhead de várias gravações de disco do mesmo buffer do arquivo de log.
No momento de uma falha do sistema, apenas as entradas de log que foram gravadas de volta para o disco são consideradas no processo de recuperação, pois o conteúdo da memória principal pode ser perdido. Logo, antes que uma transação alcance seu ponto de confirmação, qualquer parte do log que ainda não tenha sido gravada no disco deve agora sê-lo. Esse processo é chamado de gravação forçada do buffer de log antes da confirmação de uma transação.