Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Golang, mysql:Błąd 1040:Za dużo połączeń

sql.Open tak naprawdę nie otwiera połączenia z Twoją bazą danych.

sql.DB utrzymuje pulę połączeń z bazą danych. Za każdym razem, gdy wysyłasz zapytanie do bazy danych, program będzie próbował uzyskać połączenie z tej puli lub w inny sposób utworzyć nowe. Te połączenia są następnie umieszczane z powrotem w puli po ich zamknięciu.

To właśnie rows.Close() robi.Twój db.QueryRow("...") robi to samo wewnętrznie, gdy wywołujesz Scan(...) .

Podstawowym problemem jest to, że tworzysz zbyt wiele zapytań, z których każde wymaga połączenia, ale nie zamykasz swoich połączeń wystarczająco szybko. W ten sposób Twój program musi utworzyć nowe połączenie dla każdego zapytania.

Możesz ograniczyć maksymalną liczbę połączeń używanych przez program, wywołując SetMaxOpenConns w Twojej sql.DB.

Zobacz http://go-database-sql.org/surprises.html aby uzyskać więcej informacji.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Różnica między FIELD() i FIND_IN_SET() w MySQL

  2. Zoptymalizuj wydajność MySQL/MariaDB za pomocą narzędzia MySQLTunner

  3. MySQL - Wartość 1 w DECIMAL (2, 2) wychodzi jako 0,99

  4. MySQL INSERT ....ON DUPLICATE UPDATE - Dodaje jeden do autoinkrementacji

  5. Ta sama aplikacja, różne bazy danych:Entity framework 6.X + MySQL + SQL Server