pg_test_fsync

pg_test_fsync — determina o wal_sync_method mais rápido para o PostgreSQL

Sinopse

pg_test_fsync [opção...]

Descriçã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.

Opções

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-test

Especifica 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
--version

Mostra a versão do utilitário pg_test_fsync, e termina.

-?
--help

Mostra a ajuda sobre os argumentos da linha de comando do utilitário pg_test_fsync, e termina.

Variáveis de ambiente

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

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

Veja também

postgres