Limites de connexion AWS RDS

45

Le serveur RDS fournit 40 connexions maximum, comme dans la documentation suivante,
j'utilise Magento 1.9 et, à certains moments, j'atteins le nombre maximal de contacts, puis le site Web est hors service.
Avez-vous un moyen recommandé de résoudre ce problème?

De ma compréhension, si j'ai 2 serveurs Web connectés à un serveur RDS, je devrais avoir 2 connexions RDS, pas plus.

Alaa Badran
la source
2
"De ma compréhension, si j'ai 2 serveurs Web connectés à un serveur RDS ... je devrais alors avoir 2 connexions RDS, pas plus." C'est une compréhension incorrecte. Il s'agit généralement d'une connexion par processus de travail ou thread.
Michael - sqlbot
Merci @ Michael-sqlbot .. Oui, je comprends mal, mais je voulais m'assurer. Mais pourquoi, lorsque 40 connexions arrivent à RDS, elles refusent toute autre connexion et sont inaccessibles jusqu'à ce que les autres connexions soient fermées?
Alaa Badran
C'est par conception, à partir du max_connectionsparamètre. Pour la plupart des charges de travail, vous devriez être en mesure de l'augmenter en toute sécurité, car il s'agit d'une valeur par défaut conservatrice en toute sécurité ... mais vous souhaiterez rechercher la cause de ces pics.
Michael - sqlbot

Réponses:

65

La variable de limite max_connections AWS RDS est basée sur le type d'instance. Vous pouvez donc mettre à niveau votre RDS ou en créer d'autres.

Les types RDS avec limite max_connections:

  • t2.micro 66
  • t2.small 150
  • m3.medium 296
  • t2.medium 312
  • m3.large 609
  • t2.large 648
  • m4.large 648
  • m3.xlarge 1237
  • r3.large 1258
  • m4.xlarge 1320
  • m2.xlarge 1412
  • m3.2xlarge 2492
  • r3.xlarge 2540

Référence par max_connections aux tailles d'instance MySQL AWS RDS en 2015

Mise à jour 2017-07

Le paramètre actuel max_connections RDS MySQL est défini par défaut {DBInstanceClassMemory/12582880}. Si vous utilisez t2.micro avec 512 Mo de RAM, max_connections pourrait être (512 * 1024 * 1024) / 12582880 ~ = 40, etc.


Chaque serveur Web peut avoir de nombreuses connexions à RDS, ce qui dépend de vos demandes SQL provenant du serveur Web.

Nick Tsai
la source
Je le sais, mais lorsque le nombre de connexions atteint 40, le serveur ne répond pas? Vérifiez ceci: drive.google.com/file/d/0B-_uggt0MBYOZElemEItWDIwUEk/…
Alaa Badran
1
Je vérifie les groupes de paramètres RDS, le nombre maximal de connexions est défini par défaut. Par {DBInstanceClassMemory/12582880}conséquent, lorsque vous utilisez t2.micro avec 512 Mo de RAM, le nombre (512*1024*1024)/12582880 = 40.69maximal de connexions peut expliquer le nombre maximal de connexions que vous possédez .
Nick Tsai
2
Vous pouvez vérifier la valeur en interrogeant ce RDS MySQL avec la commande show variables like 'max_connections';.
Nick Tsai
1
Vous pouvez créer un nouveau parameter groupet changer la valeur de max_connections à la valeur que vous voulez. Ce sera la nouvelle limite de connexion pour votre instance RDS.
backslashN
1
Cette réponse tient en 2019. Vous pouvez toujours vérifier vous-même en faisantSHOW VARIABLES WHERE Variable_name='max_connections'
Dave Stein
30

Vous pouvez modifier la max_connectionsvaleur en mettant à jour la stratégie de paramètre par défaut ou en en créant une nouvelle. Je suggérerais d'utiliser cette dernière.

  • Aller à RDS
  • Groupes de paramètres
  • Créer un nouveau groupe de paramètres (AWS laissera tout par défaut)
  • rechercher la max_connectionsvaleur
  • Changer la valeur à utiliser
  • Aller à l'instance RDS et modifier
  • Sélectionnez le nouveau groupe de paramètres créé et redémarrez l'instance ou laissez AWS le redémarrer lors de la prochaine fenêtre de maintenance.

J'espère que cela t'aides!

David
la source
2
<3 ceci devrait être la réponse acceptée
bbozo
2
même si je fixais max_connections à 1000, rds ne permettait toujours que 100 connexions maximum sur une instance micro
Miguel Mota
1

Bien que l'augmentation du nombre maximal de connexions sur la configuration du serveur puisse résoudre le problème, vous devez envisager de vérifier les configurations et les implémentations de votre application.

Je ne suis pas un expert de Magento, mais comme je rencontrais récemment un problème similaire sur un projet sur lequel je travaillais, j'ai remarqué que la mise en œuvre par défaut du framework que j'utilisais créait une connexion avec chaque appel à la base de données.

Bien que cela ne pose aucun problème à certains, lorsque vous avez plus de visiteurs ou que certaines tâches nécessitent une base de données importante et peuvent être exécutées sur plusieurs connexions, le meilleur moyen d'éviter que le serveur ne se bloque avec l'erreur "TOO MANY CONNECTIONS" consiste à implémenter une base de données. pool de connexion.

Cela empêche l’application de créer plus de connexions que le serveur peut gérer et de ne pas la mettre en panne pour les utilisateurs. Un pool de connexions garderait une file d'attente pour les demandes d'accès à la base de données jusqu'à ce qu'une connexion devienne disponible afin qu'il puisse poursuivre le traitement de la demande des utilisateurs.

Gardez simplement à l'esprit que le pool de connexions doit être thread-safe dans un scénario multi-thread.

Uriel Bertoche
la source
1

Connectez-vous à votre instance RDS (à l'aide d'un client MySQL) et exécutez la requête suivante:

SHOW VARIABLES LIKE 'max_connections';
Shammi Shailaj
la source
1

Informations réelles pour les instances t3 Postgresql (groupe de paramètres default.postgres10):

  • db.t3.micro - 112 max_connections
  • db.t3.small - 225 max_connections
  • db.t3.medium - 450 max_connections
  • db.t3.large - 901 max_connections
  • db.t3.xlarge - 1802 max_connections
  • db.t3.2xlarge - 3604 max_connections

Son similaire pour default.postgres9 et default.postgres11

anton.uspehov
la source
0

Ce ne sont pas 40 connexions maximum, mais 40 instances RDS maximum. Vous n'utilisez probablement qu'une seule instance en fonction de votre description.

Vous pouvez avoir des milliers de connexions au serveur RDS car chaque fois qu'une session est ouverte avec la base de données, une nouvelle connexion est créée. Vous êtes probablement confronté à des contraintes de performances et devriez envisager d'élargir l'instance RDS.

jason s
la source
Merci @jason J'ai les informations suivantes: Lorsque la connexion à 40 est atteinte, le RDS ne répond pas avant la fermeture des autres connexions. Nous avons une instance R3.xlarge RDS. Voici une capture d'écran de cette image: drive.google.com/file/d/0B-_uggt0MBYOZElEMEItWDIwUEk/… Nous disposons d'un processeur inactif avec un nombre élevé de connexions
Alaa Badran
Ce sont des connexions, pas autre chose
Orlando