PostgreSQL évolue jusqu'à 64 cœurs?

10

Dans cet article sur Computer World , il précise que PostgreSQL peut évoluer jusqu'à une limite de 64 cœurs. Cela signifie-t-il pour un processeur multicœur de 64 cœurs? Ou plusieurs processeurs avec moins de cœurs?

La raison pour laquelle je pose la question est parce que j'essaie de trouver le nombre de processeurs que PostgreSQL peut évoluer, mais bien sûr, cela peut être limité au type de processeur. Cependant, j'ai trouvé d'autres statistiques dans d'autres bases de données (c'est-à-dire que Microsoft SQL Server indique ici qu'il peut évoluer jusqu'à 320 processeurs logiques) et ils ne spécifient pas leur nombre de cœurs. Est-ce une statistique très vague?

Toutes les pensées seraient très appréciées. Merci!

O_O
la source
1
PostgreSQL ne se soucie pas s'il s'agit de 8 processeurs 8 cœurs, 32 processeurs 2 cœurs, ou autre. Il ne se soucie que des processeurs logiques. De plus, 64 cœurs sont approximatifs et dépendent du reste de votre matériel; 64 cœurs ne vous serviront à rien si vous n'avez que 4 Go de RAM pour une base de données de 1 To sur un disque dur SATA à 7 200 tr / min. Il n'y a pas de limite technique stricte sur les nombres de base, c'est juste qu'il a récemment été testé et éprouvé pour évoluer jusqu'à 64.
Craig Ringer

Réponses:

7

Non, c'est une statistique très précise. Un "processeur logique" est un noyau. Et un noyau est juste cela, peu importe comment ils sont répartis sur des processeurs physiques.

Et si vous avez affaire à une machine avec plus de cœurs que le nombre pris en charge, cela ne devrait pas être un problème avec PostgreSQL. Chaque connexion est intrinsèquement monothread *, donc quel que soit le nombre de cœurs dont vous disposez, c'est ce qui va limiter l'efficacité et l'efficience des connexions simultanées.

Inutile de dire que cela signifie également que vous devriez mettre votre argent dans des cœurs plus rapides que la quantité de cœurs, sauf si vous souhaitez regrouper les choses d'une manière plus compliquée.

* Mise à jour 2017: certaines requêtes (ou sous-requêtes) peuvent être exécutées en parallèle .

Oli
la source
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.<- Je n'accepte cette affirmation que si le nombre de cœurs est supérieur au nombre de clients simultanés et qu'il est peu probable que le nombre de clients simultanés augmente. Il est assez important pour la performance d'avoir un noyau disponible pour chaque backend Postgres ...
voretaq7
@ voretaq7 Je suis généralement d'accord mais un CPU avec un TPS plus élevé peut (évidemment) gérer plus de transactions dans un temps donné, donc plus de clients. Il y aura un endroit idéal qui dépend de votre type de charge et de votre budget.
Oli
1
un processus logique est la plus petite unité d'exécution logique, avec les technologies actuelles, ce n'est pas un noyau, c'est un fil.
dyasny
2
@ voretaq7: Il n'est pas rare de se connecter à postgresql via un mécanisme de regroupement de connexions. Cela se fait entre autres parce que la connexion à postgresql est relativement coûteuse. Le regroupement peut réduire considérablement le nombre de connexions simultanées à la base de données. J'ai donc tendance à préférer les processeurs rapides au nombre de cœurs. Mais comme toujours: cela dépend de nombreux facteurs ...
m.sr
2
@ m.sr Accordé - les mécanismes de regroupement de connexions sont très courants. Le "plus intelligent" d'entre eux fera tourner plusieurs connexions à Postgres et s'équilibrera entre eux (l'une de nos applications internes le fait en donnant à chaque processus Apache sa propre connexion à Postgres - une cartographie assez pratique pour notre cas d'utilisation avec un backend raisonnable rapport utilisateurs / utilisateurs). À mon humble avis, si votre pool de connexions fait en sorte que les requêtes sont mises en file d'attente plutôt que de générer des backends, cela ne vous rend pas service, mais les avantages et les inconvénients de cela seraient plus intéressants à approfondir pour les administrateurs de bases de données . Alors j'ai demandé!
voretaq7
12

Postgres peut évoluer jusqu'à autant de processeurs que vous souhaitez installer, et votre système d'exploitation peut gérer / gérer efficacement. Vous pouvez installer Postgres sur une machine à 128 cœurs (ou même une machine avec 128 processeurs physiques) et cela fonctionnera correctement. Il peut même fonctionner mieux que sur une machine à 64 cœurs si le planificateur du système d'exploitation peut gérer autant de cœurs.

Postgres a été montré pour évoluer linéairement jusqu'à 64 cœurs (avec des mises en garde: nous parlons de performances de lecture, dans une configuration spécifique (disque, RAM, OS, etc.) - Robert Haas a un article de blog avec un joli graphique qui J'ai reproduit ci-dessous:

entrez la description de l'image ici

Qu'est-ce qui est important dans ce graphique?

La relation est linéaire (ou presque) tant que le nombre de clients est inférieur ou égal au nombre de cœurs , puis commence ce qui semble être à peu près une diminution log-linéaire des performances car vous avez plus de connexions client que vous. faire des cœurs pour exécuter les backends Postgres parce que les backends commencent à se battre pour le CPU (la charge moyenne dépasse 1,0, etc ...).

Bien que cela n'ait été démontré que jusqu'à 64 cœurs, vous pouvez généraliser que vous pouvez continuer à ajouter des cœurs (et des clients) et à améliorer les performances, jusqu'à la limite de certains autres sous-systèmes (disque, mémoire, réseau) où les processus ne sont plus ayant des problèmes de contention du processeur, mais attend à la place autre chose.

( Haas a également un autre article dans lequel ils ont prouvé l'évolutivité linéaire à 32 cœurs, qui a un excellent matériel de référence sur l'évolutivité en général - lecture de fond fortement recommandée!)

voretaq7
la source
2
Par ailleurs, la raison de cette évolutivité linéaire a été mentionnée dans la réponse d'Oli : Postgres utilise un processus backend distinct pour chaque connexion client. Par conséquent, si vous n'utilisez qu'une seule connexion, vous ne verrez pas beaucoup (le cas échéant) d'avantages pour plusieurs cœurs - vous avez besoin de demandes parallèles pour exploiter plusieurs cœurs.
voretaq7
2

D'autres ont précisé qu'un processeur logique fait généralement référence à un cœur de processeur, mais je tiens à commenter la déclaration selon laquelle la façon dont les cœurs sont répartis sur les processeurs importe peu.

Vous pouvez avoir des caches sur la puce CPU qui sont partagés entre les cœurs ou qui sont dédiés à un seul ou à des sous-groupes de cœurs. Par exemple, une configuration commune est le cache L1 dédié et le cache L2 partagé. Dans ce cas, l'évolutivité d'un seul processeur dual core peut différer de deux processeurs single core.

Ces effets d'évolutivité se poursuivent dans la mémoire principale, les machines NUMA présentant un comportement différent de celui des non-NUMA.

Je les signale uniquement parce que l'OP discute de questions d'évolutivité, dont les réponses sont généralement plus nuancées que "le programme X peut utiliser les cœurs CPU Y".

Tim B
la source
1

Dans ce cas, ils signifient plusieurs processeurs avec moins de cœurs ... Une partie de la discussion est à l'épreuve du temps. Certains parlent de marketing.

ewwhite
la source