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

Golang, mysql :Erreur 1040 :Trop de connexions

sql.Open n'ouvre pas vraiment de connexion à votre base de données.

Un sql.DB maintient un pool de connexions à votre base de données. Chaque fois que vous interrogez votre base de données, votre programme essaie d'obtenir une connexion à partir de ce pool ou d'en créer une nouvelle dans le cas contraire. Ces connexions sont ensuite remises dans le pool une fois que vous les avez fermées.

C'est ce que rows.Close() fait.Votre db.QueryRow("...") fait la même chose en interne lorsque vous appelez Scan(...) .

Le problème de base est que vous créez trop de requêtes, dont chacune a besoin d'une connexion, mais vous ne fermez pas vos connexions assez rapidement. De cette façon, votre programme doit créer une nouvelle connexion pour chaque requête.

Vous pouvez limiter le nombre maximum de connexions utilisées par votre programme en appelant SetMaxOpenConns sur votre sql.DB.

Voir http://go-database-sql.org/surprises.html pour plus d'informations.