PostgreSQL 11: Evolução do particionamento do Postgres 9.6 para o Postgres 11

Uma ótima sexta-feira a todos! Falta cada vez menos tempo para o lançamento do curso "SGBD relacional", então hoje estamos compartilhando a tradução de outro material útil sobre o tema.

Em desenvolvimento PostgreSQL 11 Houve um trabalho impressionante feito para melhorar o particionamento de tabelas. Tabelas de particionamento - esta é uma função que existia no PostgreSQL há bastante tempo, mas, por assim dizer, essencialmente não existia até a versão 10, na qual se tornou uma função muito útil. Afirmamos anteriormente que a herança de tabela é a nossa implementação de particionamento, e isso é verdade. Somente esse método forçou você a fazer a maior parte do trabalho manualmente. Por exemplo, se você quisesse que tuplas fossem inseridas em seções durante INSERTs, você teria que configurar gatilhos para fazer isso para você. O particionamento por meio de herança era muito lento e difícil de desenvolver funcionalidades adicionais.

No PostgreSQL 10, vimos o nascimento do “particionamento declarativo”, um recurso projetado para resolver muitos problemas que eram insolúveis usando o antigo método de herança. Isso levou a uma ferramenta muito mais poderosa que nos permitiu dividir os dados horizontalmente!

Comparação de recursos

O PostgreSQL 11 apresenta um conjunto impressionante de novos recursos que ajudam a melhorar o desempenho e tornar as tabelas particionadas mais transparentes para os aplicativos.

PostgreSQL 11: Evolução do particionamento do Postgres 9.6 para o Postgres 11
PostgreSQL 11: Evolução do particionamento do Postgres 9.6 para o Postgres 11
PostgreSQL 11: Evolução do particionamento do Postgres 9.6 para o Postgres 11
1. Usando exceções limitantes
2. Adiciona apenas nós
3. Somente para uma tabela particionada referenciando uma tabela não particionada
4. Os índices devem conter todas as colunas-chave da partição
5. As restrições de seção em ambos os lados devem corresponder

Desempenho

Temos boas notícias aqui também! Novo método adicionado excluindo seções. Este novo algoritmo pode determinar seções adequadas observando a condição de consulta WHERE. O algoritmo anterior, por sua vez, verificou cada seção para determinar se ela poderia atender à condição WHERE. Isso resultou em um aumento adicional no tempo de planejamento à medida que o número de seções aumentava.

Na versão 9.6, com particionamento via herança, o roteamento de tuplas em partições era normalmente feito escrevendo uma função de gatilho que continha uma série de instruções IF para inserir a tupla na partição correta. Essas funções podem ser muito lentas para serem executadas. Com o particionamento declarativo adicionado na versão 10, isso funciona muito mais rápido.

Usando uma tabela particionada com 100 partições, podemos avaliar o desempenho de carregar 10 milhões de linhas em uma tabela com 1 coluna BIGINT e 5 colunas INT.

PostgreSQL 11: Evolução do particionamento do Postgres 9.6 para o Postgres 11

Desempenho de consultar esta tabela para encontrar um registro indexado e executar DML para manipular um registro (usando apenas 1 processador):

PostgreSQL 11: Evolução do particionamento do Postgres 9.6 para o Postgres 11

Aqui podemos ver que o desempenho de cada operação aumentou significativamente desde o PG 9.6. solicitações de SELECT parecem muito melhores, especialmente aqueles que são capazes de excluir múltiplas partições durante o planejamento da consulta. Isso significa que o agendador pode pular muito trabalho que deveria ter feito antes. Por exemplo, os caminhos não são mais construídos para seções desnecessárias.

Conclusão

O particionamento de tabelas está começando a se tornar um recurso muito poderoso no PostgreSQL. Ele permite que você exiba dados online rapidamente e coloque-os offline sem esperar que operações DML lentas e massivas sejam concluídas.. Isso também significa que os dados relacionados podem ser armazenados juntos, o que significa que os dados necessários podem ser acessados ​​com muito mais eficiência. As melhorias feitas nesta versão não teriam sido possíveis sem os desenvolvedores, revisores e committers que trabalharam incansavelmente em todos esses recursos.
Obrigado a todos eles! PostgreSQL 11 parece fantástico!

Aqui está um artigo tão curto, mas bastante interessante. Compartilhe seus comentários e não se esqueça de se inscrever Dia Aberto, dentro do qual o programa do curso será descrito detalhadamente.

Fonte: habr.com

Adicionar um comentário