Um commit interessante chegou ao servidor de banco de dados PostgreSQL de código aberto esta manhã.

David Rowley, do Postgres, conseguiu uma mudança bastante significativa para 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.

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.

Além disso, esse commit muda completamente a regra de que ponteiros para memória palloc’d devem ser prefixados diretamente por um ponteiro para o contexto de memória proprietário e, em vez disso, insistimos que eles sejam prefixados diretamente por um valor de 8 bytes onde o os 3 bits menos significativos 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 em este commit.

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 carga de trabalho 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 no mundo real quando for lançada em uma versão estável do PostgreSQL. Mas com o PostgreSQL 15 já sendo ramificado antes de seu lançamento ainda este ano, essa mudança não é esperada até o PostgreSQL 16.

Categories: IT Info