PostgreSQL otimiza desempenho e reduz sobrecarga de gerenciamento de memória

PostgreSQL 16 vem com mais melhorias de desempenho e SIMD para x86 e Arm
PostgreSQL otimiza desempenho e reduz sobrecarga de gerenciamento de memória

Um commit interessante foi feito no servidor de banco de dados PostgreSQL de código aberto. O desenvolvedor David Rowley, do Postgres, conseguiu uma mudança bastante significativa. Assim, deve melhorar o desempenho e reduzir a sobrecarga do gerenciamento de memória para este servidor de banco de dados. A mudança reduz o tamanho do cabeçalho do bloco de 16 para 8 bytes e, por sua vez, esse trabalho deve levar a um uso de memória muito mais eficiente. Sendo assim, o PostgreSQL otimiza desempenho e reduz sobrecarga de gerenciamento de memória.

As alterações feitas aqui reduzem o tamanho do cabeçalho do bloco para apenas 8 bytes para todos os 3 tipos de contexto de memória. Para alocações de pequeno a médio porte, isso aumenta significativamente o número de blocos que podemos ajustar em um determinado bloco, o que resulta em um uso muito mais eficiente da memória.

PostgreSQL otimiza desempenho e reduz sobrecarga de gerenciamento de memória

Além disso, este commit muda completamente a regra de que os ponteiros para a memória palloc’d devem ser prefixados diretamente para o contexto de memória proprietário. Então, em vez disso, insistimos que eles sejam prefixados diretamente por um valor de 8 bytes onde o menos significativo 3 -bits são definidos para um valor para indicar a qual tipo de contexto de memória o ponteiro pertence. Usando esses 3 bits como um índice (conhecido como MemoryContextMethodID) para um novo array que armazena os métodos para cada tipo de contexto de memória, agora podemos passar o ponteiro dado a funções como pfree() e repalloc() para a função específico para essa implementação de contexto para permitir que eles criem seus próprios métodos de encontrar o contexto de memória que possui o pedaço de memória alocado fornecido.

Mais detalhes sobre essa otimização de desempenho do PostgreSQL em relação à sobrecarga de memória podem ser encontrados neste commit.

PostgreSQL otimiza desempenho e reduz sobrecarga de gerenciamento de memória
PostgreSQL otimiza desempenho e reduz sobrecarga de gerenciamento de memória. Veja as novidades.

Uma discussão anterior sobre a redução da sobrecarga de memória do PostgreSQL viu Rowley desfrutando de um aumento de desempenho de 17% na taxa de transferência para uma atividade simples somente leitura em uma estação de trabalho Ryzen Threadripper.

Certamente será interessante ver como essa redução de sobrecarga de memória ajuda de forma efetiva quando estrear em uma versão estável do PostgreSQL. Porém, com o PostgreSQL 15 já saindo antecipadamente, ainda este ano, essa é uma mudança só deve ocorrer no PostgreSQL 16.