J'ai fini par parler de pools de connexions utilisant GCP. L'erreur «Le nombre maximum de connexions a dépassé 100» se produit. C'est une solution que j'ai trouvée en cherchant pourquoi le nombre de connexions augmente.
Cloud: GCP Serveur WEB Vue / CloudRun Serveur d'API Golang / CloudRun Serveur de base de données MySQL / CloudSQL
Chaque fois que je frappe l'API, une nouvelle connexion est établie entre le serveur API et le serveur DB.
S'est avéré.
En d'autres termes, la connexion n'a pas pu être réutilisée.
Utilisez la méthode suivante dans database.sql pour définir le pool de connexions. En outre, il semble que ORM puisse également être utilisé pour le regroupement de connexions.
Nom de la méthode | Explication |
---|---|
func (db *DB) SetMaxOpenConns(n int) | Définissez le nombre maximum de connexions. Définissez n sur une valeur de 0 ou moins et le nombre de connexions est illimité. |
func (db *DB) SetMaxIdleConns(n int) | Définissez le nombre maximal de connexions dans le pool de connexions. |
func (db *DB) SetConnMaxLifetime(d time.Duration) | Définissez l'heure à laquelle la connexion peut être réutilisée. En définissant d sur une valeur de 0 ou moins, il peut être réutilisé pour toujours. |
Mis en œuvre comme suit.
DBconnection
func NewLocalDBConnection() error {
/* ===== connect datebase ===== */
// user
user := os.Getenv("MYSQL_USER")
// password
password := os.Getenv("MYSQL_PASSWORD")
// connection database
database := os.Getenv("MYSQL_DATABASE")
// connection host
host := "localhost"
// connection port
port := "3306"
var err error
DB, err = setupDB("mysql", fmt.Sprintf("%s:%s@tcp(%s:%s)/%s?parseTime=true", user, password, host, port, database))
if err != nil {
return fmt.Errorf("sql.Open: %v", err)
}
return err
}
//this function is a function for connection pooling
func setupDB(Driver string, dsn string) (*sql.DB, error) {
db, err := sql.Open(Driver, dsn)
if err != nil {
return nil, err
}
//Définissez le nombre maximal de connexions dans le pool de connexions.
db.SetMaxIdleConns(100)
//Définissez le nombre maximum de connexions. Définissez n sur une valeur de 0 ou moins et le nombre de connexions est illimité.
db.SetMaxOpenConns(100)
//Définissez l'heure à laquelle la connexion peut être réutilisée. En définissant d sur une valeur de 0 ou moins, il peut être réutilisé pour toujours.
db.SetConnMaxLifetime(100 * time.Second)
return db, err
}
Recommended Posts