Bisakah satu permintaan PostgreSQL menggunakan banyak inti?

57

Dalam versi terbaru PostgreSQL (per Des 2013), dapatkah kami membagikan kueri antara dua atau lebih inti untuk mendapatkan peningkatan kinerja? Atau haruskah kita mendapatkan core yang lebih cepat?

ALH
sumber

Jawaban:

49

Tidak, untuk versi PostgreSQL sebelum v9.6. Silakan lihat FAQ PostgreSQL : Bagaimana PostgreSQL menggunakan sumber daya CPU?

Server PostgreSQL berbasis proses (tidak berulir). Setiap sesi database yang menghubungkan ke satu sistem operasi PostgreSQL (OS) proses . Beberapa sesi secara otomatis tersebar di semua CPU yang tersedia oleh OS. OS juga menggunakan CPU untuk menangani disk I / O dan menjalankan tugas non-database lainnya. Aplikasi klien dapat menggunakan utas, yang masing-masing terhubung ke proses basis data yang terpisah.

Sejak versi 9.6, sebagian dari beberapa kueri dapat dijalankan secara paralel, dalam proses OS yang terpisah, memungkinkan penggunaan beberapa core CPU. Kueri paralel diaktifkan secara default di versi 10 (max_parallel_workers_per_gather), dengan paralelisme tambahan yang diharapkan dalam rilis mendatang.

Jayadevan
sumber
38

PostgreSQL 9.6+ dan seterusnya, akan mulai melihat Parallel-Query akhirnya datang ke PostgreSQL.

Untuk misalnya Konsep seperti Pemindaian Paralel / Paralel Bergabung / Agregat Paralel sekarang sudah dipanggang, dengan lebih banyak lagi yang akan datang.

Apa yang benar-benar menarik adalah bahwa ada laporan yang mengkonfirmasi near-linear speed-updalam beberapa kasus, yang cukup mengesankan!

Robins Tharakan
sumber
3

Tidak. Setiap koneksi menghasilkan proses terpisah di server.

Anda dapat "meniru" beberapa paralelisme menggunakan bahasa prosedural berulir seperti pljava. Buat prosedur java (fungsi) yang meluncurkan beberapa utas dan membuat hasil keluaran menggunakan beberapa pekerja. Backend disinkronkan sehingga setiap pekerja dapat memperbarui output asinkron.

Java memiliki dukungan yang baik untuk koordinasi / kerja sama benang.

Sebagai contoh, ini akan bagus untuk operasi intensif CPU atau operasi panjang jaringan.

cavila
sumber