Se bem entendi, quando um usuário atualiza um registro de banco de dados e confirma a transação, a chamada commit() será bloqueada até que as seguintes etapas sejam concluídas:
- O banco de dados documenta a mudança no log write-ahead (WAL) .
- O banco de dados atualiza o registro real.
- O banco de dados remove a entrada WAL.
Tenho as seguintes dúvidas sobre o WAL:
- Quando o banco de dados sabe que é seguro remover a entrada do WAL?
- Um WAL implica gravar o registro no disco duas vezes (uma vez no WAL, uma vez no arquivo de banco de dados)?
- O Postgres afirma que o WAL "reduziu significativamente o número de gravações em disco, porque apenas o arquivo de log precisa ser liberado para o disco", mas (voltando à pergunta nº 1) você não precisa liberar o arquivo principal do banco de dados antes de remover uma entrada do WAL?
Em primeiro lugar, parabéns por tentar entender como o WAL funciona. Muitas vezes é mal compreendido, mas quando as pessoas entendem o conceito, é um verdadeiro momento de luz para entender os bancos de dados.
Precisamos reformular sua descrição das etapas que ocorrem para confirmar uma transação:
É isso, terminamos, a transação está confirmada. O registro na memória é modificado, os detalhes do que foi modificado são armazenados no log, eliminando a necessidade de proteger cada alteração de registro no disco físico.
Vamos às suas perguntas:
A única explicação linear seria que a entrada de log não é necessária depois que os registros de banco de dados modificados são liberados para o disco. Quando isso ocorre depende de uma variedade de fatores que variam de acordo com o banco de dados. O SQL Server, por exemplo, tem um intervalo de recuperação configurável que controla a frequência do ponto de verificação (a ação de liberar registros alterados no disco).
Sim, mais ou menos, não, dependendo da sua perspectiva. Altere um registro uma vez e a modificação será registrada no log e, quando ocorrer um ponto de verificação, será gravada no disco. Altere o registro 15 vezes entre os pontos de verificação e você terá 15 alterações registradas no log, mas o registro modificado será gravado no disco apenas uma vez, no próximo ponto de verificação.
Sim, você sabe, mas veja acima por que o WAL reduz as gravações em disco.