не понимаю как мгновенно после инсертов закрыть коннекшн? У меня коннекшены утекают мгновенно когда многопоточно пихаю в базу данные.
На каждый запрос создаешь новое соединение?
Ну хотелось бы в данном случае. Иначе у меня быстро запросы плодятся
db.Close() не пробовал? Закроет соединение, если запросов нет. Но, по моему, с логикой в проекте что то не так. если надо на каждый запрос открывать соединение.
Знаете, покумекал и решил что да, с логикой что-то не то. На свежую голову перепишу.
Если нет возможности подряд пулять кучу инсертов, можно их выполнить в транзакции, там все быстро выполнится и экономно по ресурсам для бд
Дело в том что выполняю эти запросы в транзакции. Но почему-то соединения все равно плодятся. Если в pgbouncer выбираю session, то все норм. Если transaction то соединения не закрываются и висят.
в pgbouncer в режиме transaction pooling две транзакции могут быть выполнены в разных соединениях, но id транзакции действителен только в рамках одного соединения. если session то каждой сессии выдается одно соединение и закрепляется за ней на всё время жизни. таким образом все транзакции будут выполнены в рамках одного соединения
Спасибо за разъяснения. Тут дело в кривости моих рук, поэтому проблема была только в том что я сам же в хендлере в цикле плодил транзакции, да еще и в несколько потоков. Логику поменял, теперь всё отлично.
Обсуждают сегодня