Mysql
 sql >> Database >  >> RDS >> Mysql

Golang, MySQL:Errore 1040:Troppe connessioni

sql.Open non apre realmente una connessione al tuo database.

Un sql.DB mantiene un pool di connessioni al database. Ogni volta che esegui una query sul tuo database, il tuo programma tenterà di ottenere una connessione da questo pool o altrimenti ne creerà una nuova. Queste connessioni vengono quindi rimesse nel pool una volta chiuse.

Questo è ciò che rows.Close() fa.Il tuo db.QueryRow("...") fa la stessa cosa internamente quando chiami Scan(...) .

Il problema di base è che stai creando troppe query, ognuna delle quali ha bisogno di una connessione, ma non stai chiudendo le connessioni abbastanza velocemente. In questo modo il tuo programma deve creare una nuova connessione per ogni query.

Puoi limitare il numero massimo di connessioni utilizzate dal tuo programma chiamando SetMaxOpenConns sul tuo sql.DB.

Vedi http://go-database-sql.org/surprises.html per ulteriori informazioni.