Comment puis-je augmenter le nombre maximum de connexions de mon instance Amazon RDS for MySQL ou Amazon RDS for PostgreSQL ?

Lecture de 6 minute(s)
0

Je souhaite augmenter le nombre maximum de connexions pour mon instance de base de données Amazon Relational Database Service (Amazon RDS) for MySQL ou Amazon RDS for PostgreSQL.

Résolution

Remarque : Avant d'augmenter le nombre maximum de connexions, il est recommandé d'optimiser vos configurations existantes.

Vérifier la valeur actuelle de max_connection

La métrique max_connections définit le nombre maximum de connexions à la base de données pour RDS for MySQL et RDS for PostgreSQL. La valeur par défaut de max_connections dépend de la classe d'instance utilisée par l'instance Amazon RDS. Une classe d'instance de base de données avec plus de mémoire disponible peut avoir un plus grand nombre de connexions à la base de données.

Pour vérifier la valeur de max_connections, connectez-vous à l'instance de base de données Amazon RDS pour votre moteur de base de données et exécutez la commande suivante.

  • RDS for MySQL :

    SHOW GLOBAL VARIABLES LIKE 'max_connections';
  • RDS for PostgreSQL :

    postgres=> show max_connections;

Remarque : Le nombre par défaut de max_connections que vous calculez à l'aide d'une formule peut légèrement varier par rapport à la sortie des commandes précédentes. Cet écart est dû au fait qu'Amazon RDS réserve une partie de la mémoire totale de DBInstanceClassMemory pour les opérations de système d'exploitation sous-jacentes. Les commandes précédentes utilisent uniquement la mémoire réservée au moteur PostgreSQL et non au système d'exploitation hôte sous-jacent.

Optimiser vos connexions existantes

Avant d'augmenter la valeur de max_connections, vérifiez si vous pouvez réduire le nombre de connexions existantes. Lorsque le nombre de connexions client dépasse la valeur de max_connections, l'une des erreurs suivantes s'affiche :

Ces erreurs peuvent se produire lorsqu'Amazon RDS a une charge de travail accrue ou qu'il est verrouillé au niveau des tables ou des lignes. Si la charge de travail de votre instance fonctionne comme prévu, vous devez augmenter le paramètre max_connections.

Vérifiez que vous avez fermé toutes les connexions du client et de l'application à la fin d'une opération

Lorsqu'une connexion au serveur n'est pas fermée, l'application client ouvre une nouvelle connexion. Au fil du temps, ces nouvelles connexions au serveur peuvent amener votre instance à dépasser la valeur de max_connections.

Pour répertorier toutes les connexions de votre instance de base de données RDS for MySQL, exécutez la commande suivante :

SHOW FULL PROCESSLIST;

Pour afficher les connexions de chaque base de données pour votre instance RDS for PostgreSQL, exécutez la commande suivante :

SELECT datname, numbackends FROM pg_stat_database;

(MySQL uniquement) Vérifiez les connexions en veille

Des connexions ouvertes en veille ou inactives se produisent lorsque vous définissez des valeurs plus élevées pour les paramètres de délai de connexion, tels que wait_timeout ou interactive_timeout. Si vous configurez un quota de connexions élevé, l'utilisation de la mémoire peut être élevée même si vous n'utilisez pas ces connexions.

Pour afficher les connexions inactives dans une instance RDS for MySQL, exécutez la requête suivante :

SELECT * FROM INFORMATION_SCHEMA.PROCESSLIST WHERE COMMAND='Sleep';

Pour mettre fin à une connexion en veille dans une instance de base de données RDS for MySQL, exécutez la commande suivante :

CALL mysql.rds_kill(example-pid);

(PostgreSQL uniquement) Vérifiez les connexions inactives

Pour afficher les connexions inactives dans une instance RDS for PostgreSQL, exécutez la requête suivante :

    SELECT * FROM pg_stat_activity WHERE pid <> pg_backend_pid()
    AND state in ('idle', 'idle in transaction', 'idle in transaction (aborted)', 'disabled')
    AND state_change < current_timestamp - INTERVAL '15' MINUTE;

La sortie de la requête montre les processus backend qui se trouvent à l’état inactif, inactif dans la transaction, inactif dans la transaction (abandonné) ou désactivé pendant plus de 15 minutes.

Pour mettre fin à une connexion inactive dans une instance RDS for PostgreSQL, exécutez la commande suivante :

SELECT pg_terminate_backend(example-pid);

Remarque : Il est recommandé de configurer uniquement les connexions actives dont vous avez besoin pour les performances de l'application. Si la structure de votre application nécessite des connexions inactives, il est recommandé d'utiliser le proxy Amazon RDS.

Augmenter le nombre maximum de connexions

Remarque : Lorsque vous opérez une mise à l’échelle ascendante d’une instance, vous subissez des durées d’indisponibilité et modifiez le mode de facturation.

Pour augmenter le nombre maximum de connexions, il est recommandé d’effectuer une mise à l’échelle ascendante de votre instance de base de données vers une classe d'instance de base de données dotée d’une mémoire supplémentaire. Il n'est pas recommandé d'augmenter le paramètre max_connections au-delà de la valeur par défaut. L'instance peut rencontrer des problèmes lorsque davantage de connexions nécessitent une utilisation plus importante de la mémoire. Les instances dont la mémoire est insuffisante peuvent se bloquer. Si vous augmentez la valeur de max_connections, surveillez la métrique Amazon CloudWatch FreeableMemory pour surveiller votre utilisation des ressources.

Toutefois, si vos instances disposent d'une grande quantité de mémoire libre, modifiez manuellement le paramètre max_connections. Avant de régler max_connections, ajustez la limite de connexion dans le groupe de paramètres pour tenir compte des modifications de la mémoire disponible sur les instances de base de données.

Si votre instance de base de données utilise un groupe de paramètres par défaut, vous devez créer et utiliser un groupe de paramètres personnalisé pour modifier max_connections. Associez le groupe de paramètres de base de données personnalisés à votre instance Amazon RDS, puis redémarrez l'instance. Une fois le nouveau groupe de paramètres personnalisés associé à votre instance de base de données, vous pouvez modifier la valeur du paramètre max_connections. Pour plus d'informations, consultez la section Comment puis-je modifier les valeurs d'un groupe de paramètres de base de données Amazon RDS ?. Définissez la valeur de max_connections sur une valeur légèrement supérieure au nombre maximum de connexions que vous prévoyez d'ouvrir sur chaque instance de base de données.

Remarque : Pendant le redémarrage, vous subissez une brève panne.

Bonnes pratiques RDS for MySQL pour augmenter max_connections

Si vous avez activé Schéma de performance, il est recommandé d'utiliser le paramètre max_connections par défaut. Les structures de mémoire de Schéma de performance sont dimensionnées automatiquement en fonction des variables de configuration du serveur.

Remarque : Si vous activez Performance Insights pour une instance de base de données Amazon RDS for MySQL, Schéma de performance est automatiquement activé.

Pour votre cas d'utilisation, optimisez les paramètres de délai d'expiration pour les paramètres de connexion MySQL suivants :

  • wait_timeout
  • interactive_timeout
  • net_read_timeout
  • net_write_timeout
  • max_execution_time
  • max_connect_errors
  • max_user_connections

Pour plus d'informations sur ces paramètres, consultez la page 7.1.8 Variables système du serveur sur le site Web de MySQL.

Bonnes pratiques de RDS for PostgreSQL pour augmenter max_connections

Pour votre cas d'utilisation, optimisez les paramètres de délai d'expiration pour les paramètres de connexion PostgreSQL suivants :

  • idle_in_transaction_session_timeout
  • tcp_keepalives_idle
  • tcp_keepalives_interval
  • tcp_keepalives_count

Pour plus d'informations sur ces paramètres, consultez les pages idle_in_transaction_session_timeout (entier) et 19.3.2 Paramètres TCP sur le site Web de PostgreSQL.