PostgreSQL ridimensiona fino a 64 core?


10

In questo articolo di Computer World , si specifica che PostgreSQL può scalare fino a un limite di core di 64. Questo significa per un processore multi-core di 64 core? O più processori con meno core?

Il motivo per cui chiedo è perché sto provando a scoprire quanti processori PostgreSQL può scalare fino a, ma ovviamente questo può essere limitato al tipo di processore. Tuttavia, ho stato trovare altre statistiche in altri database (ad esempio Microsoft SQL Server qui affermando che può scalare fino a 320 processori logici) e che non specificare il loro numero di core. È una statistica molto vaga?

Ogni pensiero sarebbe molto apprezzato. Grazie!


1
A PostgreSQL non importa se si tratta di 8 CPU a 8 core, 32 CPU a 2 core o altro. Si preoccupa solo dei processori logici. Inoltre, 64 core sono approssimativi e dipendono dal resto dell'hardware; 64 core non ti gioveranno se hai solo 4 GB di RAM per un database da 1 TB su un disco rigido SATA a 7200 rpm. Non esiste un limite tecnico rigido ai numeri di core, è solo che è stato recentemente testato e dimostrato di scalare bene fino a 64.
Craig Ringer,

Risposte:


7

No è una statistica molto precisa. Un "processore logico" è un nucleo. E un nucleo è proprio questo, non importa come si diffondano sui processori fisici.

E se hai a che fare con una macchina con più core rispetto al numero supportato, questo non dovrebbe essere un problema con PostgreSQL. Ogni connessione è intrinsecamente a thread singolo *, quindi qualsiasi numero di core hai è ciò che limiterà l'efficienza e l'efficacia delle connessioni simultanee.

Inutile dire che ciò significa anche che dovresti mettere i tuoi soldi in core più veloci rispetto alla quantità di core a meno che tu non voglia raggruppare le cose in un metodo più complicato.

* Aggiornamento 2017: alcune query (o sottoquery) possono essere eseguite in parallelo .


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.<- Concordo con questa affermazione solo se il numero di core è maggiore del numero di client simultanei e è improbabile che il numero di client simultanei aumenti. È abbastanza importante per le prestazioni avere un core disponibile per ogni backend di Postgres ...
voretaq7,

@ voretaq7 Sono per lo più d'accordo, ma una CPU con un TPS più elevato può (ovviamente) gestire più transazioni in un determinato momento, quindi più client. Ci sarà un punto debole che dipende dal tipo di carico e dal budget.
Oli,

1
un processo logico è la più piccola unità di esecuzione logica, con le tecnologie attuali, non è un nucleo, è un thread.
dyasny,

2
@ voretaq7: non è raro connettersi a postgresql attraverso un meccanismo di pool di connessioni. Tra l'altro, ciò avviene perché la connessione a Postgresql è relativamente costosa. Il pooling può ridurre estremamente il numero di connessioni simultanee al database. Quindi tendo a preferire CPU veloci rispetto al numero di core. Ma come sempre: dipende da molti fattori ...
m.sr

2
@ m.sr Concordato: i meccanismi di pooling delle connessioni sono molto comuni. Il "più intelligente" di questi creerà diverse connessioni a Postgres e si bilancerà tra loro (una delle nostre app interne lo fa dando ad ogni processo Apache la propria connessione a Postgres - una mappatura abbastanza conveniente per il nostro caso d'uso con un backend ragionevole rapporto utenti / utenti). IMHO se il tuo pool di connessioni sta mettendo in coda le query piuttosto che generare backend, non ti sta facendo alcun favore, ma i vantaggi e gli svantaggi di questo sarebbe più interessante approfondire su amministratori di database . Così ho chiesto!
voretaq7,

12

Postgres può scalare fino a quanti processori vuoi installare e il tuo sistema operativo può gestire / gestire in modo efficace. Puoi installare Postgres su una macchina a 128 core (o anche su una macchina con 128 processori fisici) e funzionerà benissimo. Esso può anche funzionare meglio su una macchina 64 core se lo scheduler OS può gestire che molti core.

Postgres ha dimostrato di scalare linearmente fino a 64 core (con avvertenze: stiamo parlando di prestazioni di lettura, in una configurazione specifica (disco, RAM, sistema operativo, ecc.) - Robert Haas ha un articolo di blog con un bel grafico che Ho riprodotto di seguito:

inserisci qui la descrizione dell'immagine

Cosa c'è di importante in questo grafico?

La relazione è lineare (o quasi) fintanto che il Numero di clienti è inferiore o uguale al Numero di core , quindi inizia quella che sembra essere una riduzione approssimativamente log-lineare delle prestazioni poiché si dispone di più connessioni client di te esegui core per eseguire i backend di Postgres perché i backend iniziano a lottare per la CPU (la media del carico supera 1,0, ecc ...).

Sebbene sia stato dimostrato solo per un massimo di 64 core, è possibile generalizzare che è possibile continuare ad aggiungere core (e client) e migliorare le prestazioni, fino al limite di alcuni altri sottosistemi (disco, memoria, rete) in cui i processi non sono più avendo problemi di contesa con la CPU ma aspettando invece qualcos'altro.

( Haas ha anche un altro articolo in cui hanno dimostrato la scalabilità lineare a 32 core che ha un ottimo materiale di riferimento sulla scalabilità in generale - lettura di sfondo altamente raccomandata!)


2
Per inciso, la ragione di questa scalabilità lineare è stata menzionata nella risposta di Oli : Postgres utilizza un processo di backend separato per ogni connessione client. Di conseguenza, se stai utilizzando una sola connessione, non vedrai molti vantaggi (se ce ne sono) per più core: hai bisogno di richieste parallele per sfruttare più core.
voretaq7,

2

Altri hanno chiarito che un processore logico si riferisce generalmente a un core della CPU, ma voglio commentare l'affermazione che non importa come i core sono distribuiti sulle CPU.

È possibile avere cache sui die della CPU condivise tra core o dedicate a singoli o sottogruppi di core. Ad esempio, una configurazione comune è la cache L1 dedicata e la cache L2 condivisa. In questo caso, la scalabilità di una singola CPU dual core può differire da due CPU single core.

Questi effetti di scalabilità continuano nella memoria principale, con macchine NUMA che presentano comportamenti diversi rispetto a non-NUMA.

Le sottolineo solo perché l'OP sta discutendo questioni di scalabilità, le cui risposte sono generalmente più sfumate rispetto a "il programma X può usare i core della CPU Y".


1

In questo caso, significano processori multipli con meno core ... Alcuni discorsi sono a prova di futuro. Alcuni sono marketing-talk.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.