Una singola query PostgreSQL può utilizzare più core?


57

Nelle versioni recenti di PostgreSQL (da dicembre 2013), possiamo condividere una query tra due o più core per ottenere un aumento delle prestazioni? O dovremmo ottenere core più veloci?

Risposte:


49

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.




3

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.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.