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!
Réponses:
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 .
la source
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 ...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:
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!)
la source
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".
la source
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.
la source