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?

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.




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.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.