Estou fazendo este curso essencial do EDB PostgreSQL e o instrutor explicou sobre a arquitetura PostgreSQL referindo-se ao diagrama que, sempre que um cliente faz uma solicitação de atualização e supõe que os dados estão presentes no buffer compartilhado (isso significa que não há necessidade de buscá-los no armazenamento de arquivos), então ' farei uma entrada nos buffers WAL e, ao confirmar , o gravador WAL gravará a transação nos logs de transações e a tornará permanente, mas não nos sistemas de arquivos (até onde entendi, essa é a tarefa do checkpointer , abaixo). tão bom.
imagem cortesia traning.enterprisedb.com
Agora vem o checkpointer, é um processo que é executado após cada determinado intervalo de tempo "geralmente 5 minutos é o tempo ideal" e grava qualquer coisa no buffer compartilhado no armazenamento de arquivos.
Minha pergunta é: suponha que o checkpointer tenha sido executado e depois disso eu iniciei uma transação atômica e transferi 100 dólares para meu amigo, como é que meu amigo pode vê-lo imediatamente, o Postgres está fazendo consulta aos logs de transações? Ou como isso está acontecendo?
Mas depois de pensar um pouco, percebo que quando é feita a solicitação para atualizar os dados e para atualizá-los, o Postgres os traz para a memória principal e uma maneira viável de fazer isso é acompanhar os dados sujos no buffer compartilhado e atualizar os dados no próprio buffer compartilhado e nos logs de transações que podemos ter 0/1
com cada entrada de transação DML para identificar se os dados estão presentes no buffer compartilhado ou não. Isso também pode ser útil ao fazer análises.
Alguém pode me ajudar a entender? Desde já, obrigado!