Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Golang, mysql:Fehler 1040:Zu viele Verbindungen

sql.Open öffnet nicht wirklich eine Verbindung zu Ihrer Datenbank.

Eine sql.DB verwaltet einen Pool von Verbindungen zu Ihrer Datenbank. Jedes Mal, wenn Sie Ihre Datenbank abfragen, versucht Ihr Programm, eine Verbindung aus diesem Pool zu erhalten oder andernfalls eine neue zu erstellen. Diese Verbindungen werden dann wieder in den Pool gestellt, sobald Sie sie schließen.

Das ist was rows.Close() tut.Ihre db.QueryRow("...") macht dasselbe intern, wenn Sie Scan(...) aufrufen .

Das grundlegende Problem besteht darin, dass Sie zu viele Abfragen erstellen, von denen jede eine Verbindung benötigt, aber Sie schließen Ihre Verbindungen nicht schnell genug. Auf diese Weise muss Ihr Programm für jede Abfrage eine neue Verbindung erstellen.

Sie können die maximale Anzahl der von Ihrem Programm verwendeten Verbindungen begrenzen, indem Sie SetMaxOpenConns aufrufen auf Ihrer sql.DB.

Siehe http://go-database-sql.org/surprises.html für weitere Informationen.