Se você estiver preocupado com a consistência, considere o uso de uma ferramenta como diskchecker.pl
para garantir que seu disco esteja honrando os flushes. Você também pode usar pg_test_fsync
e ver se está recebendo taxas suspeitas de alta fsync () que podem indicar o cache de gravação inseguro, a menos que você saiba que tem um cache de write-back super rápido e seguro contra falhas.
Veja a documentação do PostgreSQL sobre confiabilidade de gravação para obter informações sobre essas ferramentas e outras opções .
As propriedades que seu armazenamento deve ter para ser confiável são:
-
Quando uma gravação for liberada com fsync()
, gravar barreiras, O_SYNC
ou similar, ela deverá estar em um armazenamento durável que não esteja limpo ou corrompido em perda de energia, falha do sistema operacional, VM guest ou falha do host , etc.
-
A solicitação de fsync()
solicitações deve ser honrada, para que, se as confirmações A
, B
e C
ocorrerem na ordem escrita, seus dados também sejam liberados para armazenamento durável nessa ordem . Não é permitido ao sistema otimizar as coisas misturando as gravações de C
e B
nas gravações de A
para melhor desempenho, pois se ele falhar / perder energia na metade do caminho, você terá dados gravados fora de ordem e replay WAL não será confiável.
-
Quando um bloco tiver sido liberado com fsync()
, ele deverá ser recuperável do armazenamento. O armazenamento ou armazenamento somente de gravação que retorna um valor diferente do que você forneceu não é muito bom.
Se o seu armazenamento tiver essas duas propriedades, não importa se ele trava, reordena as gravações (contanto que não o faça através de barreiras / sincronizações), os caches gravam (desde que honre o cache flushes), etc.
É difícil superar o teste plug-pull. Isso é exatamente o que diz. Durante os testes de aprovação / pré-implantação, arranque a energia de todo o sistema enquanto ele estiver sob carga, inicialize-o novamente e verifique se o DB repete seus logs e se recupera de forma limpa. Repita.