
Mikhail
24.01.2018
12:49:59
Ну триггер на сторное бд, что вот создалася сессия, значит создавай временную таблицу

Petr
24.01.2018
12:50:33

Mikhail
24.01.2018
12:50:35
Можете тогда с приложения при установке соединения ещё и инит sql свой делать

Google

Sergey
24.01.2018
12:50:43

Mikhail
24.01.2018
12:51:09

Mikhail
24.01.2018
12:51:14
Или эмулировать временные Таблицы на постоянных и использую txcurrent

Mikhail
24.01.2018
12:51:44
Жаль!

Maksim
24.01.2018
12:52:59

Mikhail
24.01.2018
12:52:59
txid_current()

Yaroslav
24.01.2018
12:53:13
Жаль!
Разве это не зависит от режима pgbouncer? Кажется, в session level pooling временные таблицы по умолчанию DROP-аются по завершении сессии.

Mikhail
24.01.2018
12:53:22

Maksim
24.01.2018
12:54:17
Конечно
ссылкой не поделитесь, а то никак нагуглить не могу

Mikhail
24.01.2018
12:58:53
Ладно, в которой раз придеться юзать UNLOGGED вместо TEMP :)
Все никак не могу придумать, как TEMP таблицы заюзать :)

Google

Konstantin
24.01.2018
13:00:29
Но ведь временные таблицы можно использоватьс pgbouncer-ом только в режиме session level pooling!
А толку от такого режима мало. Его можно использовать когда есть мало глупых клиентов, которые не держут коннектов, а на каждый чих устанавливают новое соединение. Но это по любому ошибка дизайна. А нужен pgbuncer в первую очередь когда есть много умных клиентов, но лишь некоторые из них одновеременно активны. В таком случае нужно использовать statement level pooling и временные таблицы использовать нельзя.

Mikhail
24.01.2018
13:07:36

Maksim
24.01.2018
13:08:34
Спасибо!

Mikhail
24.01.2018
13:16:16

Konstantin
24.01.2018
13:18:28
Для транзакции можнопри использовании transaction level pooling. То тогда и каллбак при старте session не нужен. Создаёшь таблицу в начале транзакции и кдаляешь в конце... И получаешь в результате catalog bloating.

Yaroslav
24.01.2018
13:19:31

Mikhail
24.01.2018
13:20:06
pgbouncer вообще раздражает, он периодически, без надобности, просто убивает разогретые tcp соединения в режиме commit


Konstantin
24.01.2018
13:22:13
>А почему Вы считаете, что это ошибка дизайна?
Ну потому что установление коннекта - это очень дорогая операция.
Конечно бывают ситуации, когда без этого никак. Но в большинтсве случаев всё таки лучше открыть коннекшин один раз и держать пока он нужен.

Mikhail
24.01.2018
13:22:43

Mikhail
24.01.2018
13:23:47
На коннект_квери
У человека видимо нет доступа
Как у разраба приложения

Konstantin
24.01.2018
13:25:05
> не понятно как выставлять схему например и прочие сесионные параметры
1. Никак. Зачем их выставлять? Т.е. зачем клиенту могут потребоваться какие-то специфичные только для него установки? Разве что только роль задать...
2. Все установки (set xyz=XXX) конкатенировать в строчку и добавлять это строку в качестве префикса к каждому statement-у через ';'

Maksim
24.01.2018
13:25:34

Mikhail
24.01.2018
13:25:47
а рабочие!

Maksim
24.01.2018
13:26:10

Mikhail
24.01.2018
13:27:08

Google

Mike Chuguniy
24.01.2018
13:27:10
а рабочие!
А вот это либо баг, либо надо разбираться.

Mikhail
24.01.2018
13:27:35
server_connect_timeout

Mike Chuguniy
24.01.2018
13:28:33
По моему это фича как раз
Я такого не помню на проектах с различным объемом данных, с различной нагрузкой и различным временем запросов.

Mikhail
24.01.2018
13:28:51
а не коммитный
при сессионном он держит соединение

Konstantin
24.01.2018
13:29:34
>Можно в начала сессии создавать
Какие сессии в режиме statement/transaction pooling?
Я не спец по pgbouncer-у. Я с другой стороны в осонвном лазил:) temporary табличка живёт в бэкенде. pgbouncer в режиме отличном от session pooling разбрасывает запросы по разным бэкендам. Я не могу себе представить как бы можно было создать временную табличку в начале сессии и и потом использовать её на любом бэкенде. Даже если pgbouncer поддерживает некий каллбэк, который будет выполняться пере выполнением запроса или транзакции на каждом бэкенде, то всё равно данные временной таблички между бэкендами никто не передаст.

Mikhail
24.01.2018
13:29:39
И надо понимать, что обрывает он не соединение между клиентом и pgbouncer, а соединение между pgbouncer и postgres
Т.е. если у тебя нет сессионных параметров, то ты этого и не заметишь

Mikhail
24.01.2018
13:30:09

Mikhail
24.01.2018
13:30:13
Но по факту он именно так и делает
Т.е. убивает наиболее загруженные коннекты, между pgbouncer и postgres

Mikhail
24.01.2018
13:32:05

Mike Chuguniy
24.01.2018
13:32:09

Mikhail
24.01.2018
13:32:29
Он обрывает по таймауту содениение между pgbouncer и postgres
и не важно, нагруженное оно или нет было

Yaroslav
24.01.2018
13:33:31

Maksim
24.01.2018
13:43:00
Он обрывает по таймауту содениение между pgbouncer и postgres
тут вопрос: коннект обрывается, когда он освобождён и находится в пуле, или когда он занят внешним клиентом? По-хорошему imho, даже если таймаут сработал в момент занятости коннекта, то он должен подождать пока освободиться и потом пересоздать свою сессию

Google

Mikhail
24.01.2018
13:43:40

Maksim
24.01.2018
13:44:17

Mikhail
24.01.2018
13:44:27
Речь о коммитном пуллинге

Maksim
24.01.2018
13:45:29
ну тогда всё норм, после транзакции коннект потенциально свободен

Mikhail
24.01.2018
13:45:51
а оно обрывается

Maksim
24.01.2018
13:46:48

Mikhail
24.01.2018
13:46:53
нет
между bouncer и postgres
что еще хуже
я мог бы понять, если бы обрывалось между клиентом и боунсером


Konstantin
24.01.2018
13:48:34
Если соединение ненужное, то и держать его не нужно:)
Что значит "не нужное"? Это значит в течение нескольких секунд к базе никто не полезет. Тогда его ес-но можно дропнуть. Но тогда и pgbouncer не особо нужен. Если же клиент сразу же захочет отправить ещё один запрос, то рвать и переустанавливать соединение очень глупо. Ес-но мы (приложение) часто не знаем намерения клиента. Может он пошлёт запрос сейчас же. А может ушёл обедать. В таком случае лучше всего наверное рвать коннекшин по таймауту.
Я только хочу сказать, что session level pooling в pgbouncer-е не спасёт о того, что вернушись с обеда несколько тысяч клиентов олдновременно захотят обратится к базе, что потребует запуска Посгресом нескольких тысяч процессов-бэкендов (если в pgbouncer-а не ограничено максимальное число коннектов). А если ограничено - то тогда некторые клиенты просто не смогут достучаться до базы.

Maksim
24.01.2018
13:49:07

Yaroslav
24.01.2018
13:49:37

Mikhail
24.01.2018
13:49:39


Maksim
24.01.2018
13:51:25

Konstantin
24.01.2018
13:51:49
> Соединение нагруженное, данные идут постоянно. Но по таймауту оно обрубается железно!
А зачем тогда использовать pgbouncer?

Dmitry
24.01.2018
13:52:25

Google

Maksim
24.01.2018
13:52:44

Dmitry
24.01.2018
13:53:22
тогда если бакэнд выделил память, то почему при реконнекте он снова от системы не потребует в таком же размере память?
а частое выделение памяти - тоже проблема.

Maksim
24.01.2018
13:53:57

Konstantin
24.01.2018
13:54:33
>тогда у бекэндов будет разбухать локальная память
Память может разбухать либо если в Посгресе есть memory leak-и, либо у нас очень большой каталог изи-за чего локальные кэши могут раздуваться. Но это корее клинический случай. Опять таки если в базе сотни тысяч ьтаблиц, то покупайте под неё машинку с большим колличеством памяти, чтобы радувающиейся бэкенды в неё влезали. Потому как если каталог ен влезает в кэш, это по любому очень плохо будет сказываться на скорости.

Maksim
24.01.2018
13:54:42

Dmitry
24.01.2018
13:55:11

Maksim
24.01.2018
13:55:14

Dmitry
24.01.2018
13:55:15
а так проблемы нет.

Konstantin
24.01.2018
13:56:21
Не должны бэкенды дуться. Чаще вссего это свидетельствует о каких-то проблемах с приложением: слишком много вреенных таблиц, prepared statement-ов,...

Maksim
24.01.2018
13:57:28

Dmitry
24.01.2018
13:59:14

Konstantin
24.01.2018
14:00:22
Есть ещё кончено франгментация памяти. С которой аллокаторы борются борются но никак не поборют. Но Посгресовые MemoryContext-ы всё таки должны сильно уменьшать фрагментацию.
Да, oom может случиться из-за прокола с планом. Но перезапуск бэкенда тут ен поможет. Это может случиться и на свеженьком бэкенде.

Yaroslav
24.01.2018
14:02:14

Mikhail
24.01.2018
14:02:31

Konstantin
24.01.2018
14:03:26
Потому что установление TCP-шного соединения (хотя с pgbouncer-ом, хоть с кем либо ещё) по любому не дешёвая операция.

Mikhail
24.01.2018
14:03:29

Yaroslav
24.01.2018
14:03:32