PostgreSQL meningkatkan hingga 64 core?

10

Dalam artikel Computer World ini , disebutkan bahwa PostgreSQL dapat meningkatkan hingga batas inti 64. Apakah ini berarti untuk satu prosesor multi-core 64 core? Atau beberapa prosesor dengan core lebih sedikit?

Alasan mengapa saya bertanya adalah karena saya mencoba menemukan berapa banyak prosesor yang dapat ditingkatkan PostgreSQL tetapi tentu saja itu mungkin terbatas pada jenis prosesor. Namun, saya telah menemukan statistik lain di database lain (yaitu Microsoft SQL Server di sini menyatakan dapat meningkatkan hingga 320 prosesor logis) dan mereka tidak menentukan jumlah core mereka. Apakah ini statistik yang sangat kabur?

semua pemikiran akan sangat dihargai. Terima kasih!

O_O
sumber
1
PostgreSQL tidak peduli apakah itu 8 CPU 8-core, 32 CPU 2-core, atau apa pun. Itu hanya peduli tentang prosesor logis. Juga, 64 core merupakan perkiraan dan tergantung pada perangkat keras Anda yang lain; 64 core tidak akan membantu Anda jika Anda hanya memiliki 4GB RAM untuk basis data 1TB pada hard drive SATA 7200rpm. Tidak ada batasan teknis yang keras pada nomor inti, hanya saja baru-baru ini telah diuji dan terbukti skalanya hingga 64.
Craig Ringer

Jawaban:

7

Tidak, ini statistik yang sangat tepat. "Prosesor logis" adalah inti. Dan intinya hanya itu, tidak masalah bagaimana mereka tersebar di prosesor fisik.

Dan jika Anda berurusan dengan mesin dengan core lebih banyak daripada angka yang didukung, ini seharusnya tidak menjadi masalah dengan PostgreSQL. Setiap koneksi secara inheren single-threaded * jadi berapapun jumlah core yang Anda miliki adalah apa yang akan membatasi efisiensi dan kemanjuran koneksi bersamaan.

Tak perlu dikatakan ini juga berarti Anda harus meletakkan uang Anda di inti lebih cepat dari jumlah inti kecuali jika Anda ingin mengelompokkan hal-hal dalam metode yang lebih rumit.

* Pembaruan 2017: Beberapa kueri (atau subkueri) dapat dieksekusi secara paralel .

Oli
sumber
1
Needless to say this also means you should put your money in faster cores than quantity of cores unless you want to cluster things in a more complicated method.<- Saya hanya setuju dengan pernyataan ini jika jumlah core lebih besar dari jumlah klien konkuren, dan jumlah klien konkuren tidak mungkin meningkat. Sangat penting bagi kinerja untuk memiliki inti yang tersedia untuk setiap backend Postgres ...
voretaq7
@ voretaq7 Saya sebagian besar setuju tetapi CPU dengan TPS lebih tinggi dapat (jelas) menangani lebih banyak transaksi dalam waktu tertentu, sehingga lebih banyak klien. Akan ada sweet spot yang tergantung pada jenis dan anggaran Anda.
Oli
1
proses logis adalah unit eksekusi logis terkecil, dengan teknologi saat ini, itu bukan inti, itu utas.
dyasny
2
@ voretaq7: Tidak jarang terhubung ke postgresql melalui mekanisme pooling koneksi. Antara lain ini dilakukan karena menghubungkan ke postgresql relatif mahal. Penggabungan dapat mengurangi jumlah koneksi bersamaan ke basis data secara luar biasa. Jadi saya cenderung lebih suka CPU cepat dari # core. Tapi seperti biasa: itu tergantung pada banyak faktor ...
m.sr
2
@ m.sr Setuju - mekanisme penyatuan koneksi sangat umum. Yang "paling pintar" dari ini akan memutar beberapa koneksi ke Postgres dan menyeimbangkan di antara mereka (salah satu aplikasi internal kami melakukannya dengan memberikan setiap proses Apache koneksi sendiri ke Postgres - pemetaan yang cukup nyaman untuk kasus penggunaan kami dengan backend yang wajar -untuk rasio pengguna). IMHO jika penyatuan koneksi Anda membuat kueri antrian alih-alih menelurkan backends itu tidak membantu Anda, tetapi pro dan kontra dari itu akan lebih menarik untuk menyelidiki Administrator Database . Jadi saya bertanya!
voretaq7
12

Postgres dapat meningkatkan sebanyak prosesor yang ingin Anda instal, dan OS Anda dapat menangani / mengelola secara efektif. Anda dapat menginstal Postgres pada mesin 128 inti (atau bahkan mesin dengan 128 prosesor fisik) dan itu akan berfungsi dengan baik. Ini mungkin bahkan bekerja lebih baik dari pada mesin 64 inti jika OS scheduler dapat menangani banyak core.

Postgres telah ditunjukkan untuk skala linear hingga 64 core (dengan peringatan: Kita berbicara tentang kinerja baca, dalam konfigurasi tertentu (disk, RAM, OS, dll.) - Robert Haas memiliki artikel blog dengan grafik yang bagus yang Saya telah mereproduksi di bawah ini:

masukkan deskripsi gambar di sini

Apa yang penting tentang grafik ini?

Hubungannya linear (atau hampir sama) selama Jumlah Klien kurang dari atau sama dengan Jumlah Core , dan kemudian mulai apa yang tampak kira-kira penurunan kinerja log-linear karena Anda memiliki lebih banyak koneksi klien daripada Anda lakukan core untuk menjalankan Postgres backends pada karena backends mulai berjuang untuk CPU (rata-rata beban berjalan di atas 1.0, dll ...).

Meskipun hanya diperlihatkan hingga 64 core, Anda dapat menggeneralisasi bahwa Anda dapat terus menambahkan core (dan klien) dan terus meningkatkan kinerja, hingga batas beberapa subsistem lain (disk, memori, jaringan) di mana proses tidak lagi mengalami masalah pertikaian CPU tetapi malah menunggu sesuatu yang lain.

( Haas juga memiliki artikel lain di mana mereka membuktikan skalabilitas linier hingga 32 core yang memiliki beberapa bahan referensi yang bagus tentang skalabilitas secara umum - bacaan latar yang sangat direkomendasikan!)

voretaq7
sumber
2
Kebetulan, alasan skalabilitas linier ini disebutkan dalam jawaban Oli : Postgres menggunakan proses backend terpisah untuk setiap koneksi klien. Akibatnya, jika Anda hanya menggunakan satu koneksi, Anda tidak akan melihat banyak manfaat (jika ada) untuk banyak core - Anda memerlukan permintaan paralel untuk mengeksploitasi banyak core.
voretaq7
2

Yang lain telah mengklarifikasi bahwa prosesor logis umumnya mengacu pada inti CPU, tetapi saya ingin mengomentari pernyataan bahwa tidak masalah bagaimana core tersebar di CPU.

Anda dapat memiliki cache pada die CPU yang dibagi di antara inti atau yang didedikasikan untuk satu atau subkelompok inti. Sebagai contoh, satu konfigurasi umum adalah cache L1 khusus dan cache L2 bersama. Dalam hal ini, skalabilitas CPU dual core tunggal dapat berbeda dari dua CPU core tunggal.

Skalabilitas ini mempengaruhi berlanjut ke memori utama, dengan mesin NUMA menunjukkan perilaku yang berbeda dari non-NUMA.

Saya tunjukkan ini hanya karena OP sedang membahas pertanyaan skalabilitas, yang jawabannya umumnya lebih bernuansa daripada "program X dapat menggunakan inti CPU Y".

Tim B
sumber
1

Dalam hal ini, yang mereka maksudkan adalah beberapa prosesor dengan inti yang lebih sedikit ... Beberapa dari pembicaraan tersebut adalah bukti masa depan. Beberapa berbicara tentang pemasaran.

putih
sumber