Log de transações write-ahead

Este tópico descreve a função do log de transações write-ahead no registro de modificações de dados no disco. Para obter informações básicas sobre logs de transações, consulte Visão geral do log de transações.

O SQL Server usa um WAL (log write-ahead), que garante que nenhuma modificação de dados seja gravada no disco antes de o registro de log associado ser gravado no disco. Isso mantém as propriedades ACID de uma transação. Para obter mais informações sobre propriedades ACID e de transações, consulte Transações (Mecanismo de Banco de Dados).

Para entender como o log write-ahead funciona, é importante saber como os dados modificados são gravados no disco. O SQL Server mantém um cache do buffer no qual lê as páginas de dados quando os dados devem ser recuperados. As modificações de dados não são feitas diretamente no disco, mas são feitas na cópia da página no cache do buffer. A modificação não é gravada no disco até que seja feito um ponto de verificação no banco de dados, ou a modificação deve ser gravada para que o buffer possa ser usado para reter uma página nova. A gravação de uma página de dados modificada do cache do buffer no disco é chamada de liberação de página. Uma página modificada no cache, mas ainda não gravada no disco, é chamada de página suja.

No momento em que uma modificação é feita em uma página no buffer, um registro de log é criado no cache de log que registra a modificação. Esse registro de log deve ser gravado no disco antes de a página suja associada ser liberada do cache do buffer para o disco. Se a página suja for liberada antes da gravação do registro de log, a página suja criará uma modificação no disco que não poderá ser revertida se houver falha no servidor antes de o registro de log ser gravado no disco. O SQL Server tem lógica que impede que uma página suja seja liberada antes da gravação do registro de log associado. Os registros de log são gravados no disco quando as transações são confirmadas.

ObservaçãoObservação

Alguns dados de cache de unidades IDE SATA são gravados em memória interna antes de os dados serem gravados em disco. Isto impede que o log de write-ahead funcione corretamente. Se o computador que está executando SQL Server usar um destes tipos de discos, habilite a opção de enable_force_flush.