Czy jedno zapytanie PostgreSQL może wykorzystywać wiele rdzeni?

56

Czy w najnowszych wersjach PostgreSQL (od grudnia 2013 r.) Możemy udostępnić zapytanie między dwoma lub więcej rdzeniami, aby uzyskać wzrost wydajności? A może powinniśmy uzyskać szybsze rdzenie?

ALH
źródło

Odpowiedzi:

48

Nie, dla wersji PostgreSQL wcześniejszych niż v9.6. Zobacz FAQ PostgreSQL : W jaki sposób PostgreSQL wykorzystuje zasoby procesora?

Serwer PostgreSQL jest oparty na procesach (bez wątków). Każda sesja bazy danych łączy się z jednym procesem systemu operacyjnego PostgreSQL . System operacyjny automatycznie rozdziela wiele sesji na wszystkie dostępne procesory. System operacyjny używa również procesorów do obsługi operacji we / wy dysku i wykonywania innych zadań poza bazą danych. Aplikacje klienckie mogą używać wątków, z których każdy łączy się z osobnym procesem bazy danych.

Od wersji 9.6 części niektórych zapytań można uruchamiać równolegle, w osobnych procesach systemu operacyjnego, co pozwala na użycie wielu rdzeni procesora. Równoległe zapytania są domyślnie włączone w wersji 10 (max_parallel_workers_per_gather), z dodatkową równoległością oczekiwaną w przyszłych wydaniach.

Jayadevan
źródło
37

Począwszy od wersji PostgreSQL 9.6+ , zaczęło się pojawiać zapytanie równoległe w PostgreSQL.

Na przykład, koncepcje takie jak Parallel Scan / Parallel Join / Parallel Aggregates są już wypiekane, a wkrótce więcej.

Naprawdę ekscytujące jest to, że istnieją raporty potwierdzające near-linear speed-upw niektórych przypadkach, co jest dość imponujące!

Robins Tharakan
źródło
3

Nie. Każde połączenie tworzy osobny proces na serwerze.

Możesz „naśladować” pewną równoległość za pomocą wątkowego języka proceduralnego, takiego jak pljava. Utwórz procedurę Java (funkcję), która uruchamia kilka wątków i utwórz wynik wyjściowy przy użyciu kilku pracowników. Backend jest synchronizowany, dzięki czemu każdy proces roboczy może aktualizować dane wyjściowe asynchronicznie.

Java ma dobre wsparcie dla koordynacji / współpracy wątków.

Na przykład byłoby to przydatne w przypadku operacji intensywnie wykorzystujących procesor lub operacji na długości sieci.

Cavila
źródło