Mysql
 sql >> Base de données >  >> RDS >> Mysql

Test de charge de l'API Golang RESTful provoquant trop de connexions à la base de données

Allez database/sql ne vous empêche pas de créer un nombre infini de connexions à la base de données. S'il y a une connexion inactive dans le pool, elle sera utilisée, sinon une nouvelle connexion est créée.

Ainsi, sous charge, vos gestionnaires de requêtes sql.DB ne trouvent probablement aucune connexion inactive et une nouvelle connexion est donc créée si nécessaire. Cela tourne un peu - en réutilisant les connexions inactives lorsque cela est possible et en en créant de nouvelles si nécessaire -, atteignant finalement le nombre maximal de connexions pour la Db. Et, malheureusement, dans Go 1.1, il n'y a pas de moyen pratique (par exemple, SetMaxOpenConns ) pour limiter les connexions ouvertes.

Passez à une version plus récente de Golang. Dans Aller 1.2+ vous obtenez SetMaxOpenConns . Et consultez la documentation MySql pour commencer la configuration puis syntonisez.

db.SetMaxOpenConns(100) //tune this

Si vous devez utiliser Go 1.1, vous devrez vous assurer dans votre code que *sql.DB n'est utilisé que par N clients à la fois.