@pgsql

Страница 645 из 1062
Dmitry
24.01.2018
14:04:47
Закрытие соединения в приложении не влияет на дисконнект баунсера с постгресом. Да и установка соединения дорогая операция
установка tcp-соединения - да дорогая и медленная. но гораздо больше времени пройдет на поднятие бакэнда pg и считывания кучи критических индексов и кэшей

Mikhail
24.01.2018
14:05:08
Так какие причины не использовать такую методику работы?
В смысле? Это не поможет, соединение между боунсером и pg все равно оборвется по таймауту

Dmitry
24.01.2018
14:05:42
В смысле? Это не поможет, соединение между боунсером и pg все равно оборвется по таймауту
кстати не понял, у вас по бездействию отрубает или даже активный бакэнд?

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
В смысле? Это не поможет, соединение между боунсером и pg все равно оборвется по таймауту
Я что-то запутался. :( Я спрашивал только вот об этом: > Его можно использовать когда есть мало глупых клиентов, которые не держут коннектов, а на каждый чих устанавливают новое соединение. Но это по любому ошибка дизайна.

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

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

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 пулинга можно по очереди выполнять стайтменты различных клиентов на ограниченном чсиле клиентов. При повышенной активности клиентов они заметят лишь некторое замедление при работе с базой. Но это не ошибка приложения из зща невоможности получить доступ к базе.

Yaroslav
24.01.2018
14:35:33
1. Что что будут расходоваться ресурсы и клиента и пулера на ненужную работу (на переустановку соединений) 2. Потому что если все кдлиенты одновременно захотят работаь с базой то либо придётся запустить слишком много бэкендов и Посгресу станет плохо, либо придётсчя кого-то не пускать. И плохо станет клиентам. В режиме statement пулинга можно по очереди выполнять стайтменты различных клиентов на ограниченном чсиле клиентов. При повышенной активности клиентов они заметят лишь некторое замедление при работе с базой. Но это не ошибка приложения из зща невоможности получить доступ к базе.
Спасибо. А чем "В режиме statement пулинга можно по очереди выполнять стайтменты различных клиентов на ограниченном чсиле клиентов." при указанном дизайне приложения отличается от " придётсчя кого-то не пускать", если "не пускать" —- это "замораживать" установление connection (в bouncer-е)?

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
Покажите ? Баг отправляли ?
Так это не баг, а фича типо. Регулируется параметром server_connect_timeout

За 10летнюю практику такого не видел
и не увидете, если не будете параметры сессии менять

Можно сделать просто тест, написать клиента, который выставляет схему и делает в ней вставку в таблицу, без явного указания схемы. И зациклить его

Так вот в какой то момент вставка перестанет работать

Потому что боунсер разорвет соединение и схему нужно будет выставлять по новой

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: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

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: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 Т.е. обрывает, если сервер не отвечает в течение этого времени.

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
server_connect_timeout
Это тайм-аут на установку соединения !!!! Его ещё нет!!!

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
какую? на гитхабе в описании: 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 Т.е. обрывает, если сервер не отвечает в течение этого времени.
а при чем здесь этот параметр? > Я утверждаю, что в случае транзакционного пулинга, bouncer рвет соединение между собой и postgres не зависимо от нагрузки соединение по таймауту, который я показывал - server_connect_timeout ключевое слово - транзакционного. А теперь читаем: pool_mode: session Server is released back to pool after client disconnects. Default. transaction Server is released back to pool after transaction finishes. statement Server is released back to pool after query finishes. Long transactions spanning multiple statements are disallowed in this mode. В режиме транзакционного пулинга соединение будет закрыто после ее завершения.

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.

Страница 645 из 1062