sql >> Database >  >> RDS >> Mysql

Golang RESTful API load testing veroorzaakt te veel databaseverbindingen

Ga naar database/sql belet u niet om een ​​oneindig aantal verbindingen met de database te maken. Als er een inactieve verbinding in de pool is, wordt deze gebruikt, anders wordt er een nieuwe verbinding gemaakt.

Dus, onder belasting, vindt uw verzoekbehandelaar sql.DB waarschijnlijk geen inactieve verbindingen en dus wordt er indien nodig een nieuwe verbinding gemaakt. Dit kolkt een beetje - inactieve verbindingen hergebruiken wanneer mogelijk en nieuwe maken wanneer dat nodig is - en uiteindelijk de maximale verbindingen voor de Db bereiken. En helaas is er in Go 1.1 geen handige manier (bijv. SetMaxOpenConns ) om open verbindingen te beperken.

Upgrade naar een nieuwere versie van Golang. In Ga 1.2+ je krijgt SetMaxOpenConns . En bekijk de MySql-documenten voor het starten van de instelling en stem dan af.

db.SetMaxOpenConns(100) //tune this

Als u Go 1.1 moet gebruiken, moet u er in uw code voor zorgen dat *sql.DB wordt slechts door N clients tegelijk gebruikt.



  1. aangepaste id primaire sleutel kan niet worden opgehaald na Laravel save() methode

  2. voorwaardelijke unieke beperking

  3. Hoe LENGTH() werkt in MariaDB

  4. Atomic MySQL-transacties in Anorm