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

Test di carico dell'API RESTful Golang che causa troppe connessioni al database

Vai a database/sql non impedisce di creare un numero infinito di connessioni al database. Se è presente una connessione inattiva nel pool, verrà utilizzata, altrimenti verrà creata una nuova connessione.

Quindi, sotto carico, i gestori delle richieste sql.DB probabilmente non trovano connessioni inattive e quindi viene creata una nuova connessione quando necessario. Questo rimpicciolisce un po' -riutilizzando le connessioni inattive quando possibile e creandone di nuove quando necessario-, raggiungendo alla fine le connessioni massime per il Db. E, sfortunatamente, in Go 1.1 non esiste un modo conveniente (ad es. SetMaxOpenConns ) per limitare le connessioni aperte.

Esegui l'upgrade a una versione più recente di Golang. In Vai 1.2+ ottieni SetMaxOpenConns . E consulta i documenti MySql per iniziare l'impostazione e poi sintonizzati.

db.SetMaxOpenConns(100) //tune this

Se devi usare Go 1.1 devi assicurarti nel tuo codice che *sql.DB viene utilizzato solo da N client alla volta.