Risposte:
No, per versioni di PostgreSQL precedenti alla v9.6. Consulta le Domande frequenti su PostgreSQL : In che modo PostgreSQL utilizza le risorse della CPU?
Il server PostgreSQL è basato sul processo (non con thread). Ogni collega sessione del database ad un singolo sistema operativo PostgreSQL (OS) di processo . Più sessioni vengono automaticamente distribuite su tutte le CPU disponibili dal sistema operativo. Il sistema operativo utilizza inoltre CPU per gestire l'I / O del disco ed eseguire altre attività non di database. Le applicazioni client possono utilizzare thread, ognuno dei quali si collega a un processo di database separato.
Dalla versione 9.6, parti di alcune query possono essere eseguite in parallelo, in processi OS separati, consentendo l'utilizzo di più core della CPU. Le query parallele sono abilitate per impostazione predefinita nella versione 10 (max_parallel_workers_per_gather), con ulteriore parallelismo previsto nelle versioni future.
PostgreSQL 9.6+ in poi, inizierebbe a vedere Parallel-Query finalmente arrivare su PostgreSQL.
Ad esempio, concetti come Parallel Scan / Parallel Join / Parallel Aggregates sono già integrati, con altri in arrivo.
La cosa davvero eccitante è che ci sono rapporti che confermano near-linear speed-up
in alcuni casi, il che è piuttosto impressionante!
No, ma esiste una soluzione alternativa. :)
Ho trovato la funzione plpgsql parsel (selezione parallela), che divide la query in base alla chiave primaria, quindi si collega al database tramite l'estensione dblink e attende tutte le subquery.
https://gist.github.com/mjgleaso/8031067
L'autore ha anche scritto un articolo su questa funzione: http://geeohspatial.blogspot.com/2013/12/a-simple-function-for-parallel-queries_18.html
No. Ogni connessione genera un processo separato sul server.
Puoi "emulare" un po 'di parallelismo usando un linguaggio procedurale filettato come pljava. Creare una procedura java (funzione) che avvia diversi thread e crea il risultato di output usando diversi lavoratori. Il back-end è sincronizzato in modo che ogni lavoratore possa aggiornare l'output in modo asincrono.
Java ha un buon supporto per il coordinamento / cooperazione dei thread.
Ad esempio, ciò sarebbe utile per le operazioni che richiedono molta CPU o per la lunghezza della rete.