web-dev-qa-db-fra.com

Comment comprendre la divergence postgregesql entre la recommandation de la piscine de connexion ((2 * n_cores) + n_disks) et prendre en charge les centaines de connexions?

De PostgreSQL Docs:

Pour moi - pas un DBA expérimenté - il y a une divergence quelque part ici, en examinant notamment les offrandes de certains fournisseurs de services AS-AS-AS-Service.

Par exemple, à ce moment-là, la plus grande machine d'Amazon RDS (DB.R3.8XLarge) dispose de 32 VCPUS, qui, selon la première formule, elle réussirait peut-être à fonctionner de manière optimale avec 100 connexions dans la piscine, compte tenu de nombreux disques. Cela ne serait-il pas très mal avec les "rares cents connexions" de la deuxième formule?

Encore plus extrême, c'est la divergence d'un autre fournisseur de DBAAS, qui propose un serveur 2 Core avec 500 connexions simultanées. Comment cela pourrait-il bien fonctionner bien?

Si je suis mal compris quelque chose, merci de me le faire savoir. Merci beaucoup!

8
Jan Żankowski

"Peut supporter"! = "Débit optimal".

Vous pouvez utiliser beaucoup de connexions, mais il est plus lent.

Si vous utilisez moins de connexions et de file d'attente, vous obtenez la même quantité de travail effectuée dans une période plus petite.

Encore plus extrême, c'est la divergence d'un autre fournisseur de DBAAS, qui propose un serveur 2 Core avec 500 connexions simultanées. Comment cela pourrait-il bien fonctionner bien?

Soit ils utilisent une connexion frontale en commun comme PGbouncer en mode de mise en commun de transaction, ou cela ne fonctionnera pas bien.

Les gens aiment cependant de gros chiffres, de sorte qu'ils vous donneront de gros chiffres.

Ils font effectivement mal de la performance en le faisant. PostgreSQL a quelques coûts qui échelle linéairement avec max_connections, donc même si les connexions ne sont pas utilisées , il a toujours un impact sur la performance.

De plus, même les connexions inactives ont des coûts de ménage supplémentaires.

Si les connexions fonctionnent activement, vous avez également une affirmation sur les ressources système et sur les serrures internes.

Je rencontre régulièrement des personnes qui ont des problèmes de performance PostgreSQL - et qui essaient de les résoudre en ajoutant plus de connexions, de plus de travailleurs dans leur application, etc., en particulier des systèmes de file d'attente. Il est étonnamment difficile de les persuader que abaissant Le nombre de travailleurs rendra le système plus rapidement , et que leurs problèmes de performance originaux découlaient d'en avoir trop nombreux.

12
Craig Ringer

Beaucoup d'applications ont une mauvaise discipline de connexion, maintenir les connexions ouvertes même lorsqu'elles ne sont pas utilisées.

La définition d'une limite de connexion élevée est une assurance bon marché contre ces applications. Jusqu'à ce que quelque chose change et que les applications décident d'utiliser activement toutes ces connexions, l'assurance devient plutôt coûteuse.

2
jjanes

Une distinction importante à utiliser entre les deux revendications par rapport à la question est que la première est une formulation approximative pour le nombre de actif Connections à la fois. La deuxième revendication concerne le réglage que vous avez mis en place pour le maximum autorisé à accepter Postgres. Ce sont deux choses distinctes.

Lorsque vous revenez en arrière et lisez le Taille de la piscine de connexion optimale de la base de données Article, vous constaterez qu'il suggère de définir votre mise en commun de connexion active auprès du client, par opposition au serveur. Ils suggèrent également de laisser une capacité suffisante dans votre max_connections Valeur pour accueillir des connexions fixes, telles que l'activité pratique et l'activité administrative. Vous non Voulez-vous définir votre max_connections sur la limite de connexion active de vos travailleurs ou que vous ne pourrez peut-être pas être en mesure de PSQL lorsque vous devez!

0
Robert Casey