PostgreSQL9.6 adiciona nova configuração remote_apply para o parâmetro de configuração synchronous_commit. Lendo o documento a seguir, ainda não entendo a diferença entre a configuração on e remote_apply . Alguém pode me ajudar? Muito obrigado .
synchronous_commit (enum)
Especifica se a confirmação da transação aguardará que os registros do WAL sejam gravados no disco antes que o comando retorne uma indicação de "sucesso" ao cliente. Os valores válidos são on, remote_apply, remote_write, local e off. Alguém pode me ajudar? Muito obrigado.
Quando definido como on , os commits aguardarão até que as respostas do(s) standby(s) síncrono(s) atual(is) indiquem que receberam o registro de commit da transação e o liberaram no disco. Isso garante que a transação não será perdida, a menos que o primário e todos os standbys síncronos sofram corrupção de seu armazenamento de banco de dados. Quando definido como remote_apply , os commits aguardarão até que as respostas do(s) standby(s) síncrono(s) atual(is) indiquem que receberam o registro de commit da transação e o aplicaram, de modo que se torne visível para consultas no(s) standby(s)
síncrono_commit
http://www.postgresql.org/docs/9.6/static/runtime-config-wal.html#GUC-SYNCHRONOUS-COMMIT
Quando o standby inicialmente recebe os registros de log, eles são gravados no diretório pg_xlog do standby. Portanto, esses registros estão lá para fins de segurança, mas ainda não foram aplicados aos shared_buffers e aos arquivos de dados (e ao pg_clog etc.). Até que sejam aplicados, qualquer pessoa conectada ao standby não poderá ver os efeitos desses registros.
É como a diferença entre receber uma nota do correio dizendo "Seu envelope foi entregue" (
synchronous_commit=on
) e receber uma nota do seu banco dizendo "Seu envelope foi recebido, aberto, processado e suas instruções foram enviadas e sua conta foi creditada com os recursos, foram compensados e agora estão disponíveis para retirada" (synchronous_commit=remote_apply
).