pg_test_fsync —
determina o wal_sync_method mais rápido
para o PostgreSQL
pg_test_fsync [opção...]
O utilitário pg_test_fsync destina-se
a fornecer uma ideia razoável de qual é o
wal_sync_method mais rápido em um determinado
sistema, bem como fornecer informações de diagnóstico no caso de
identificar um problema de E/S.
Entretanto, as diferenças mostradas pelo utilitário
pg_test_fsync podem não fazer muita
diferença no uso real do banco de dados, especialmente porque muitos
servidores de banco de dados não têm a velocidade limitada por seus
WAL.
O utilitário pg_test_fsync relata o tempo
médio de operação de sincronização de arquivos em microssegundos para
cada wal_sync_method, que também pode ser usado
para ajudar nos esforços para otimizar o valor de
commit_delay.
O utilitário pg_test_fsync aceita as seguintes opções de linha de comando:
-f--filename
Especifica o nome do arquivo no qual serão escritos os dados
do teste.
Este arquivo deverá estar no mesmo sistema de arquivos que o
diretório pg_wal está, ou será colocado.
(o diretório pg_wal contém os arquivos de
WAL.)
O padrão é o arquivo pg_test_fsync.out
no diretório corrente.
-s--secs-per-testEspecifica o número de segundos para cada teste. Quanto mais tempo por teste, maior a precisão do teste, mas leva mais tempo para ser executado. O valor padrão é de 5 segundos, o que permite que o programa seja concluído em menos de 2 minutos.
-V--versionMostra a versão do utilitário pg_test_fsync, e termina.
-?--helpMostra a ajuda sobre os argumentos da linha de comando do utilitário pg_test_fsync, e termina.
A variável de ambiente PG_COLOR
especifica se devem ser usadas cores nas mensagens de diagnóstico.
Os valores possíveis são always,
auto e never.
Exemplo 172. Exemplo do tradutor
Execução do utilitário pg_test_fsync no Debian 12
$ sudo su - postgres $ $ /usr/lib/postgresql/18/bin/pg_test_fsync
5 segundos por teste
O_DIRECT suportado nesta plataforma para open_datasync e open_sync.
Compara métodos de sincronização de arquivos utilizando uma escrita de 8kB:
(in "wal_sync_method" preference order, except fdatasync is Linux's default)
open_datasync 1252,339 ops/seg 799 usecs/op
fdatasync 1238,994 ops/seg 807 usecs/op
fsync 918,533 ops/seg 1089 usecs/op
fsync_writethrough n/a
open_sync 939,725 ops/seg 1064 usecs/op
Compara métodos de sincronização de arquivos utilizando duas escritas de 8kB:
(in "wal_sync_method" preference order, except fdatasync is Linux's default)
open_datasync 618,573 ops/seg 1617 usecs/op
fdatasync 1284,496 ops/seg 779 usecs/op
fsync 803,315 ops/seg 1245 usecs/op
fsync_writethrough n/a
open_sync 469,290 ops/seg 2131 usecs/op
Compara open_sync com diferentes tamanhos de escrita:
(Isto é projetado para comparar o custo de escrita de 16jB em diferentes tamanhos
de escrita com open_sync.)
1 * escrita de 16kB open_sync 825,952 ops/seg 1211 usecs/op
2 * escritas de 8kB open_sync 469,128 ops/seg 2132 usecs/op
4 * escritas de 4kB open_sync 233,693 ops/seg 4279 usecs/op
8 * escritas de 2kB open_sync 107,392 ops/seg 9312 usecs/op
16 * escritas de 1kB open_sync 52,999 ops/seg 18868 usecs/op
Testar se o fsync em um descritor de arquivo sem escrita é respeitado:
(Se os tempos são similares, fsync() pode sincronizar dados escritos em um
descritor diferente.)
write, fsync, close 968,234 ops/seg 1033 usecs/op
write, close, fsync 965,597 ops/seg 1036 usecs/op
Escritas de 8kB não sincronizadas:
write 539540,797 ops/seg 2 usecs/op