Uma única consulta do PostgreSQL pode usar vários núcleos?

57

Nas versões recentes do PostgreSQL (em dezembro de 2013), podemos compartilhar uma consulta entre dois ou mais núcleos para obter um aumento no desempenho? Ou devemos obter núcleos mais rápidos?

ALH
fonte

Respostas:

49

Não, para versões do PostgreSQL anteriores à v9.6. Consulte as Perguntas frequentes do PostgreSQL : Como o PostgreSQL usa os recursos da CPU?

O servidor PostgreSQL é baseado em processo (não encadeado). Cada sessão de banco de dados se conecta a um único sistema operacional PostgreSQL (OS) processo . Várias sessões são automaticamente distribuídas por todas as CPUs disponíveis pelo sistema operacional. O sistema operacional também usa CPUs para manipular E / S de disco e executar outras tarefas que não são do banco de dados. Os aplicativos clientes podem usar threads, cada um dos quais se conecta a um processo de banco de dados separado.

Desde a versão 9.6, partes de algumas consultas podem ser executadas em paralelo, em processos separados do sistema operacional, permitindo o uso de vários núcleos da CPU. As consultas paralelas são ativadas por padrão na versão 10 (max_parallel_workers_per_gather), com paralelismo adicional esperado em versões futuras.

Jayadevan
fonte
38

O PostgreSQL 9.6+ em diante, começaria a ver o Parallel-Query finalmente chegando ao PostgreSQL.

Por exemplo, conceitos como Varredura Paralela / Junção Paralela / Agregados Paralelos já estão prontos, com mais por vir em breve.

O que é realmente empolgante é que existem relatórios confirmando near-linear speed-upem alguns casos, o que é bastante impressionante!

Robins Tharakan
fonte
3

Não. Cada conexão gera um processo separado no servidor.

Você pode "emular" algum paralelismo usando uma linguagem processual encadeada como pljava. Crie um procedimento java (função) 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 possui um bom suporte para coordenação / cooperação de encadeamentos.

Como exemplos, isso seria bom para operações intensivas da CPU ou operações de comprimento de rede.

cavila
fonte