Не освобождаются подключения к postgresql golang
В небольшом веб приложении использую движок "github.com/lib/pq"
Инициализирую глобальную переменную db и открываю соединение в отдельном модуле с параметрами:
db.SetMaxOpenConns(10) // Максимальное количество открытых соединений
db.SetMaxIdleConns(5) // Максимальное количество соединений в пуле
db.SetConnMaxLifetime(time.Minute * 5) // Максимальное время жизни соединения в пуле
в main использую эту же переменную db и запросы выполняю в основном через QueryRow, для тех что делаю через Query после завершения цикла перебора выполняю rows.Close(). Но при каждом переходе или запросе на странице счётчик соединений db.Stats().InUse растёт и не уменьшается, после предельного значения веб сервер перестаёт отображать страницы. Как правильно работать с пулом соединений так чтобы сайт не ложился?
Ответы (1 шт):
Отвечу на свой же вопрос. В коде использовался метод QueryRow закрывающий соединение только после выполнения метода Scan к результату запроса. Но так же в коде было много мест где получение результата запроса не требовалось, Scan не выполнялся и соответственно соединение висело открытым. Для выполнения запросов не требующих получения результата лучше использовать метод Exec, который возвращает соединение в пул сразу после выполнения.