PostgreSQL 18: A Revolução do I/O Assíncrono para Performance Otimizada

Por Mizael Xavier
PostgreSQL 18: A Revolução do I/O Assíncrono para Performance Otimizada

PostgreSQL 18 e a Chegada do I/O Assíncrono: Um Novo Paradigma de Performance

O PostgreSQL, um dos sistemas de gerenciamento de banco de dados objeto-relacional de código aberto mais avançados do mundo, está prestes a receber um incremento significativo em sua arquitetura com o lançamento da versão 18. A grande novidade é a introdução do I/O Assíncrono (AIO), uma mudança fundamental na forma como o PostgreSQL lida com operações de entrada e saída, prometendo ganhos consideráveis de performance, especialmente em ambientes de nuvem. Este artigo explora em detalhes essa nova funcionalidade, com base nas informações divulgadas pela pganalyze.

Entendendo o I/O Assíncrono e Sua Importância

Historicamente, o PostgreSQL operava em um modelo de I/O síncrono. Isso significa que, a cada requisição de leitura, o banco de dados precisava pausar e esperar que o sistema operacional retornasse os dados antes de prosseguir. Esse modelo introduz esperas desnecessárias, principalmente em ambientes de nuvem, onde o armazenamento é frequentemente conectado via rede (como o Amazon EBS) e as operações de I/O podem ter latências superiores a 1ms.

O I/O assíncrono, por outro lado, permite que as operações de I/O ocorram em segundo plano, sem bloquear as aplicações do usuário. Dessa forma, o processamento da aplicação e as operações de I/O podem ocorrer simultaneamente, resultando em um melhor desempenho. Essa capacidade de sobrepor processamento e I/O é particularmente vantajosa para bancos de dados e servidores de arquivos.

Como o I/O Assíncrono Funcionará no PostgreSQL 18

Com a chegada do PostgreSQL 18 Beta 1, um esforço de vários anos e uma mudança arquitetônica significativa estão se concretizando. Embora ainda em desenvolvimento ativo, o I/O Assíncrono representa uma transformação na maneira como o PostgreSQL gerencia I/O.

No PostgreSQL 18, o I/O Assíncrono será inicialmente limitado a operações de leitura; as escritas permanecerão síncronas, com potencial expansão para versões futuras.

A Nova Configuração io_method no PostgreSQL 18

Para controlar o mecanismo utilizado para o I/O assíncrono, o PostgreSQL 18 introduz um novo parâmetro de configuração: io_method. Essa configuração, que deve ser definida no arquivo postgresql.conf e exige reinicialização do servidor para ser alterada, determina como as operações de leitura são despachadas e se são tratadas de forma síncrona, descarregadas para workers de I/O ou submetidas diretamente ao kernel via io_uring (uma interface assíncrona do Linux).

Existem três configurações possíveis para io_method, sendo worker o padrão atual na versão Beta 1:

  • sync: Mantém o comportamento síncrono, similar ao PostgreSQL 17, utilizando posix_fadvise() para realizar a leitura antecipada (read-ahead) no kernel do Linux.
  • worker: Descarrega as operações de I/O para processos ou threads "worker" separados.
  • io_uring: Utiliza a interface io_uring do kernel Linux para I/O verdadeiramente assíncrono, ideal para cargas de trabalho com alta concorrência de I/O.

Benefícios e Considerações do I/O Assíncrono no PostgreSQL 18

Testes de benchmark realizados pela pganalyze em ambiente AWS demonstraram que o I/O assíncrono pode dobrar a performance de leitura, com ganhos ainda maiores utilizando io_uring. A otimização do parâmetro effective_io_concurrency, que indica o número de solicitações de I/O simultâneas que o sistema pode lidar eficientemente, também é crucial para extrair o máximo proveito dessa nova capacidade.

Uma consideração importante é que o I/O assíncrono altera a forma como o tempo de execução é reportado. Como o backend não bloqueia mais diretamente nas leituras de disco, o tempo total gasto em I/O pode não ser totalmente refletido na saída do EXPLAIN ANALYZE, fazendo com que consultas limitadas por I/O pareçam exigir menos esforço de I/O do que anteriormente. O PostgreSQL 18 também introduzirá uma nova visão, pg_aios, para monitorar as operações de I/O em andamento.

O Caminho Pavimentado pelo PostgreSQL 17

As bases para o I/O assíncrono no PostgreSQL 18 foram lançadas no PostgreSQL 17 com a introdução dos "read streams". Essa funcionalidade permitiu um pré-processamento mais eficiente dos dados, otimizando a forma como o PostgreSQL interage com o sistema de arquivos.

Conclusão: Um Futuro Mais Rápido para o PostgreSQL

A introdução do I/O Assíncrono no PostgreSQL 18 é um marco importante, com potencial para desbloquear níveis de performance significativamente mais altos, especialmente em infraestruturas modernas e na nuvem. Embora ainda na fase Beta, este é o momento ideal para testar e validar como o PostgreSQL 18 se comportará na prática com essa nova arquitetura de I/O. Com o desenvolvimento contínuo, espera-se que futuras versões (19 e além) possam trazer suporte a escritas assíncronas, reduzindo ainda mais os gargalos de I/O.

Mizael Xavier

Mizael Xavier

Desenvolvedor e escritor técnico

Ver todos os posts

Compartilhar: