Antworten:
Nein, für PostgreSQL-Versionen vor Version 9.6. Weitere Informationen finden Sie in den PostgreSQL-FAQ : Wie verwendet PostgreSQL CPU-Ressourcen?
Der PostgreSQL-Server ist prozessbasiert (ohne Threading). Jede Datenbanksitzung einer Verbindung zu einem einzigen PostgreSQL Betriebssystem (OS) Prozess . Das Betriebssystem verteilt automatisch mehrere Sitzungen auf alle verfügbaren CPUs. Das Betriebssystem verwendet auch CPUs, um die Datenträger-E / A zu verarbeiten und andere Nicht-Datenbank-Tasks auszuführen. Clientanwendungen können Threads verwenden, von denen jeder eine Verbindung zu einem separaten Datenbankprozess herstellt.
Seit Version 9.6 können Teile einiger Abfragen in separaten Betriebssystemprozessen parallel ausgeführt werden, sodass mehrere CPU-Kerne verwendet werden können. Parallele Abfragen sind in Version 10 (max_parallel_workers_per_gather) standardmäßig aktiviert. In zukünftigen Versionen wird eine zusätzliche Parallelität erwartet.
Ab PostgreSQL 9.6 und höher würde Parallel-Query endlich auch für PostgreSQL verfügbar sein .
Zum Beispiel sind Konzepte wie Paralleler Scan / Paralleler Join / Parallele Aggregate bereits integriert, weitere werden in Kürze folgen.
Was wirklich aufregend ist, ist, dass es Berichte gibt , die near-linear speed-up
in einigen Fällen bestätigen, was ziemlich beeindruckend ist!
Nein, aber es gibt eine Problemumgehung. :)
Ich habe die Funktion parsel (parallel select) plpgsql gefunden, die Ihre Abfrage anhand des Primärschlüssels aufteilt, dann über die Erweiterung dblink eine Verbindung zur Datenbank herstellt und auf alle Unterabfragen wartet.
https://gist.github.com/mjgleaso/8031067
Der Autor hat auch einen Artikel über diese Funktion geschrieben: http://geeohspatial.blogspot.com/2013/12/a-simple-function-for-parallel-queries_18.html
Nein. Jede Verbindung erzeugt einen separaten Prozess auf dem Server.
Sie können eine Parallelität mit einer Thread-Prozedur-Sprache wie pljava "emulieren". Erstellen Sie eine Java-Prozedur (Funktion), die mehrere Threads startet, und erstellen Sie das Ausgabeergebnis mit mehreren Workern. Das Backend ist synchronisiert, sodass jeder Worker die Ausgabe asynchron aktualisieren kann.
Java bietet eine gute Unterstützung für die Thread-Koordination / -Kooperation.
Dies ist beispielsweise für CPU-intensive Vorgänge oder Vorgänge mit Netzwerklänge hilfreich.