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?
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?
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.
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-up
dalam beberapa kasus, yang cukup mengesankan!
Tidak, tapi ada solusinya. :)
Saya menemukan parsel (pilih paralel) fungsi plpgsql, yang membagi permintaan Anda berdasarkan kunci primer, kemudian menghubungkan ke database melalui ekstensi dblink dan menunggu semua subqueries.
https://gist.github.com/mjgleaso/8031067
Penulis juga menulis artikel tentang fungsi ini: http://geeohspatial.blogspot.com/2013/12/a-simple-function-for-parallel-queries_18.html
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.