Kann eine einzelne PostgreSQL-Abfrage mehrere Kerne verwenden?


57

Können wir in neueren Versionen von PostgreSQL (Stand: Dezember 2013) eine Abfrage zwischen zwei oder mehr Kernen gemeinsam nutzen, um eine Leistungssteigerung zu erzielen? Oder sollten wir schnellere Kerne bekommen?

Antworten:


49

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.




3

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.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.