Nas versões recentes do PostgreSQL (a partir de dezembro de 2013), podemos compartilhar uma consulta entre dois ou mais núcleos para obter um aumento de desempenho? Ou devemos obter núcleos mais rápidos?
Nas versões recentes do PostgreSQL (a partir de dezembro de 2013), podemos compartilhar uma consulta entre dois ou mais núcleos para obter um aumento de desempenho? Ou devemos obter núcleos mais rápidos?
Não, para versões do PostgreSQL anteriores à v9.6. Por favor, veja o FAQ do PostgreSQL : Como o PostgreSQL usa os recursos da CPU?
PostgreSQL 9.6+ em diante, começaria a ver o Parallel-Query finalmente chegando ao PostgreSQL.
Por exemplo, Conceitos como Parallel Scan / Parallel Join / Parallel Aggregates já estão incorporados, com mais para vir em breve.
O que é realmente empolgante é que há relatos confirmando
near-linear speed-up
em alguns casos, o que é bastante impressionante!Não, mas existe uma solução. :)
Encontrei parsel (parallel select) PL/pgSQL function , que divide sua consulta com base na chave primária, conecta-se ao banco de dados por meio da extensão dblink e aguarda todas as subconsultas.
O autor também escreveu um artigo sobre essa função.
Não. Cada conexão gera um processo separado no servidor.
Você pode "emular" algum paralelismo usando uma linguagem procedural como pljava. Crie um procedimento (função) java que inicie vários threads e crie o resultado de saída usando vários trabalhadores. O back-end é sincronizado para que cada trabalhador possa atualizar a saída assíncrona.
Java tem um bom suporte para coordenação/cooperação de threads.
Como exemplos, isso seria bom para operações intensivas de CPU ou operações de comprimento de rede.