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

Golang-RESTful-API-Lasttests verursachen zu viele Datenbankverbindungen

Gehen Sie zu database/sql hindert Sie nicht daran, eine unendliche Anzahl von Verbindungen zur Datenbank herzustellen. Wenn im Pool eine freie Verbindung vorhanden ist, wird diese verwendet, andernfalls wird eine neue Verbindung erstellt.

Unter Last findet Ihr Request-Handler sql.DB also wahrscheinlich keine Leerlaufverbindungen, und daher wird bei Bedarf eine neue Verbindung erstellt. Dies schwankt für ein bisschen – Wiederverwendung von Leerlaufverbindungen, wenn möglich, und Erstellung neuer, wenn nötig – und erreicht schließlich die maximale Anzahl von Verbindungen für die Db. Und leider gibt es in Go 1.1 keinen bequemen Weg (z. B. SetMaxOpenConns ), um offene Verbindungen einzuschränken.

Aktualisieren Sie auf eine neuere Version von Golang. In Go 1.2+ Sie erhalten SetMaxOpenConns . Und sehen Sie sich die MySql-Dokumentation für die Starteinstellung an und dann stimmen.

db.SetMaxOpenConns(100) //tune this

Wenn Sie Go 1.1 verwenden müssen, müssen Sie in Ihrem Code sicherstellen, dass *sql.DB wird nur von N Clients gleichzeitig verwendet.