@twintwin1003

Golang mysql: Invalid Connection?

Есть веб-приложение, которое работает с базой данных через вот этот драйвер https://github.com/go-sql-driver/mysql
Все работает ОК, но как только подаю нагрузочное тестирование в несколько потоков (10+) при более чем 2 открытых соединениях с БД (DB.SetMaxOpenConns https://golang.org/pkg/database/sql/#DB.SetMaxOpen..., то начинают валиться ошибки
statement.go:24: Invalid Connection


Кто-нибудь сталкивался с таким, и какие есть варианты? Неужели приложение не может выдержать более 2 соединений с БД - не верю.

mysql> show variables like "max_connections";
Выдает 151
  • Вопрос задан
  • 1553 просмотра
Решения вопроса 1
@mantyr
Пишу много Golang кода с удовольствием:)
Прослеживаем цепочку через документацию
1. https://github.com/go-sql-driver/mysql используется совместно со стандартным https://golang.org/pkg/database/sql/
2. находим в https://golang.org/pkg/database/sql/ функцию
func (db *DB) Query(query string, args ...interface{}) (*Rows, error)

3. видим что результат *Rows, находим эту структуру и изучая находим функцию
func (rs *Rows) Close() error
4. точно такую же функцию видим у Stmt
func (s *Stmt) Close() error
5. делаем вывод что надо закрывать соединения, в определённых случаях, принудительно

Подобный вопрос был на toster.ru уже разва два.
Вот тут можете прочитать дискуссию по поводу особенностей работы с MySQL в Golang: https://toster.ru/answer?answer_id=685014#comments...

Полезные ссылки для тех кто хочет разобраться в вопросе:
4gophers.ru/article/go-i-sql-bazy-dannyh
go-database-sql.org/surprises.html
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@Wol_fi
php, js, mysql, highload
Кто-нибудь сталкивался с таким, и какие есть варианты?


Посмотрите конфиги сервера на предмет количества максимально активных подключений\потоков\и т.д.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы