
Dmitry
24.01.2018
14:04:47

Mikhail
24.01.2018
14:05:08

Dmitry
24.01.2018
14:05:42

Mikhail
24.01.2018
14:05:54

Google

Dmitry
24.01.2018
14:06:04
похоже на багу тогда

Mikhail
24.01.2018
14:06:06
соединение между боунсером и pg

Dmitry
24.01.2018
14:06:11
не наблюдал.

Mikhail
24.01.2018
14:06:14
а не клиентом и боунсером
не наблюдал.
если не меняете сессионные параметры, то и не заметите

Yaroslav
24.01.2018
14:07:12

Mikhail
24.01.2018
14:07:34

Yaroslav
24.01.2018
14:08:48
Почему "есть мало глупых клиентов, которые не держут коннектов, а на каждый чих устанавливают новое
соединение" —- это ошибка дизайна?

Mikhail
24.01.2018
14:12:26

Konstantin
24.01.2018
14:13:37
Это я говорил. Ещё раз:
1. Установка соединения - дорогая операция
2. Если активных клиентов может быть много (> 1000), то pgbouncer в режиме session pooling не поможет

Ilia
24.01.2018
14:15:03

Yaroslav
24.01.2018
14:16:50

Google

Yaroslav
24.01.2018
14:17:11

Konstantin
24.01.2018
14:22:34
1. Что что будут расходоваться ресурсы и клиента и пулера на ненужную работу (на переустановку соединений)
2. Потому что если все кдлиенты одновременно захотят работаь с базой то либо придётся запустить слишком много бэкендов и Посгресу станет плохо, либо придётсчя кого-то не пускать. И плохо станет клиентам. В режиме statement пулинга можно по очереди выполнять стайтменты различных клиентов на ограниченном чсиле клиентов. При повышенной активности клиентов они заметят лишь некторое замедление при работе с базой. Но это не ошибка приложения из зща невоможности получить доступ к базе.

Maksim
24.01.2018
14:22:50

Yaroslav
24.01.2018
14:35:33


Ilia
24.01.2018
14:37:35
Почему?
К 90% СУБД соединение устанавливается долго.
Да вообще сетевое соединение TCP устанавливается долго.
Но к этому сама инициализация соединения в СУБД тоже достаточно дорогая операция.
Отсоединение чуть менее дорогое, но тоже недёшево.

Konstantin
24.01.2018
14:42:28
Одно дело - когда клиент пытается приконнектится к базе и у него это не получается за заданный таймаут. Тогда работать с базой нельзя. Другое дело, когда он посылает запрос и получает ответ не через 0.1msec, а через 10msec. Ну или даже секунду.
Проблема в том, что пока есть активные клиенты и их число больше чем ограничение на число сессий, то нового просто не пустят. Даже если клиенты тупо рвут коннекшины после каждого стайтмента, всё равно нет никакой гарантии, что клиенту удасться установтить соединение с сервером за N попыток с некторым таймаутом.

Mikhail
24.01.2018
14:50:52

Mikhail
24.01.2018
14:51:15

Mikhail
24.01.2018
14:51:36
Покажите ? Баг отправляли ?
За 10летнюю практику такого не видел
Только если что то вокруг настроенно не так как надо

Mikhail
24.01.2018
14:56:31
Можно сделать просто тест, написать клиента, который выставляет схему и делает в ней вставку в таблицу, без явного указания схемы. И зациклить его
Так вот в какой то момент вставка перестанет работать
Потому что боунсер разорвет соединение и схему нужно будет выставлять по новой

Mikhail
24.01.2018
14:58:26

Mikhail
24.01.2018
14:58:29
а без нее будет ошибка, что схема не найдена

Mikhail
24.01.2018
14:58:33
Вы что то путаете

Google

Mikhail
24.01.2018
14:58:36

Mikhail
24.01.2018
14:58:41
О чем?!
server_connect_timeout
If connection and login won’t finish in this amount of time, the connection will be closed. [seconds]
Default: 15.0

Mikhail
24.01.2018
14:59:02
баунсер рвет коннект с pg по таймауту независимо от нагруженности соединения

Mikhail
24.01.2018
14:59:14
Вы вообще не про то говорите
Или путаете
Что то

Mikhail
24.01.2018
14:59:25
А про что я говорю? :)

Mikhail
24.01.2018
14:59:35
Не знаю

Mikhail
24.01.2018
14:59:59
Тогда почему вы считаете что я путаю? :)
Я говорил всегда именно про кеннект и про режим коммитов в баунсере
для сессионного режима такой проблемы нет

Mikhail
24.01.2018
15:00:29
!!!!
Стоп

Mikhail
24.01.2018
15:00:42
ага

Mikhail
24.01.2018
15:00:51

Mikhail
24.01.2018
15:01:16

Mikhail
24.01.2018
15:01:44

Google

Mikhail
24.01.2018
15:01:48
Там нет проверки активно оно ли нет

Mikhail
24.01.2018
15:01:53
Что вы там воспроизвели ?!

Mikhail
24.01.2018
15:02:07
Я не понимаю сути ваших вопросов :)

Mikhail
24.01.2018
15:02:18
Вы говорите , что есть баг

Mikhail
24.01.2018
15:02:27
Нет, не баг

Mikhail
24.01.2018
15:02:29
А я говорю, покажите

Mikhail
24.01.2018
15:02:33
А фича, которая мне не нравится

Mikhail
24.01.2018
15:02:51

Mikhail
24.01.2018
15:04:34
Я утверждаю, что в случае транзакционного пулинга, bouncer рвет соединение между собой и postgres не зависимо от нагрузки соединение по таймауту, который я показывал - server_connect_timeout

Mike Chuguniy
24.01.2018
15:05:10

Mikhail
24.01.2018
15:05:24

Vadim
24.01.2018
15:05:37
transaction
Server is released back to pool after transaction finishes.

Mikhail
24.01.2018
15:05:41

Vadim
24.01.2018
15:05:54
Коллеги, почитайте внимательно доку

Mikhail
24.01.2018
15:06:30

Vadim
24.01.2018
15:06:31

Mikhail
24.01.2018
15:07:06
Если вы имеете ввиду, что won't finish подразумевается, что ты отрубаешь, а он все равно живет
То в нашем случае он был выставлен в районе 60 часа
и ровно каждый час соединение обрывалось

Google

Mikhail
24.01.2018
15:07:52
Между pg и bouncer

Mikhail
24.01.2018
15:07:54
Я вам говорю , что если бы баунсер рвал как попало соединения , он бы не был мастхев сервер к пг
Вы троль?!

Mike Chuguniy
24.01.2018
15:08:01
Коллеги, почитайте внимательно доку
какую? на гитхабе в описании:
server_connect_timeout
If connection and login won’t finish in this amount of time, the connection will be closed. [seconds]
Default: 15.0
Т.е. обрывать соединение, если в течение этого времени попытка подключения/логина не закончилась.
В конфиге:
;; Cancel connection attempt if server does not answer takes longer.
;server_connect_timeout = 15
Т.е. обрывает, если сервер не отвечает в течение этого времени.

Mikhail
24.01.2018
15:08:15

Konstantin
24.01.2018
15:08:50
server_connect_timeout используется для прибивания соединений, котрые смогли приконнектится к Посгресу, но не смогли залогиниться за этот таймаут.
Работающие сессии по этому таймауту никто не прибивает.
Я вообще не нашёл в pgbouncer код, который пытается "просто-так" (без наличия каких-то ошибок) прибивать активные соединения.

Mikhail
24.01.2018
15:09:11

Mikhail
24.01.2018
15:09:25
server_connect_timeout

Mikhail
24.01.2018
15:09:51

Konstantin
24.01.2018
15:09:53
/* find connections that got connect, but could not log in */
if (cf_server_connect_timeout > 0) {
statlist_for_each_safe(item, &pool->new_server_list, tmp) {
server = container_of(item, PgSocket, head);
Assert(server->state == SV_LOGIN);
age = now - server->connect_time;
if (age > cf_server_connect_timeout)
disconnect_server(server, true, "connect timeout");
}
}

Vadim
24.01.2018
15:12:21


Mikhail
24.01.2018
15:13:26

Mike Chuguniy
24.01.2018
15:14:21
@pg_vadim человек утверждает, что пгбаунсер рвёт рабочее соединение посередине транзакции. Ну я его именно так понял.

Mikhail
24.01.2018
15:14:33
Нет, не по середине
а сруза после, если прошел таймаут
Возможно сыграл роль вот этот параметр
server_lifetime
The pooler will try to close server connections that have been connected longer than this. Setting it to 0 means the connection is to be used only once, then closed. [seconds]
Default: 3600.0
А не server_connection_timeout
Но факт в том, что после перехода на сесионный пулинг, проблема разрыва соединений ушла, при тех же настройках

Vadim
24.01.2018
15:16:16
теперь более понятно о чем вы

Mike Chuguniy
24.01.2018
15:18:48
Во. Ещё один параметр появился. Ещё один подкину:
server_idle_timeout
Ну чтобы скучно не было.
If a server connection has been idle more than this many seconds it will be dropped. If 0 then timeout is disabled.