Size: a a a

pgsql – PostgreSQL

2020 July 14

ВК

Виталий Кухарик... in pgsql – PostgreSQL
Mgramin
Всем спасибо, а я правильно понимаю, что в таком случае не обойтись без какого нибудь pgbouncer? А то сейчас постоянно висят несколько сотен соединений, которые наподнимали сервисы, каждый для себя для своего внутреннего пула. Приходится очень сильно задирать max_connections. И вообще насколько адекватно совместно использовать сразу оба пула соединений, и на стороне приложения и на стороне БД?
Наличие пуллера на стороне приложения не отменяет необходимости в пуллере  СУБД.
источник

ВК

Виталий Кухарик... in pgsql – PostgreSQL
Marat
А сервисы не пытаются что-то в старый мастер записать? У меня всё руками, pgbouncer останавливаю, переключаю и заного включаю pgbouncer на всех нодах. Но хочется как-то автоматизировать. К сожалению, боюсь граблей нахватать с Патрони и прочими решениями
Страх тащить новое и неизведанное в пром это скорее хорошо. Но Вы не будете бояться, если хорошо изучите как работает Patroni и алгоритм RAFT. Далее Вам стоит попрактиковаться в тестовом окружении.

Используйте готовый инсталятор кластера,
и желательно параллельно разобраться в настройке с нуля руками.
P. S. На боевых серверах вручную не советую.
источник

M

Marat in pgsql – PostgreSQL
Виталий Кухарик
Страх тащить новое и неизведанное в пром это скорее хорошо. Но Вы не будете бояться, если хорошо изучите как работает Patroni и алгоритм RAFT. Далее Вам стоит попрактиковаться в тестовом окружении.

Используйте готовый инсталятор кластера,
и желательно параллельно разобраться в настройке с нуля руками.
P. S. На боевых серверах вручную не советую.
Спасибо. Попробую)
источник

dg

denis g in pgsql – PostgreSQL
Виталий Кухарик
Наличие пуллера на стороне приложения не отменяет необходимости в пуллере  СУБД.
День добрый, а можно по детальней плз, зачем пул БД когда есть пул приложения?
источник

KK

Konstantin Knizhnik in pgsql – PostgreSQL
denis g
День добрый, а можно по детальней плз, зачем пул БД когда есть пул приложения?
Это зависит от того, как реализован пул приложения. Если он умеет ограничивать число коннектов к базе, то внешний пулер вам не нужен.  Если же пулер приложения умеет только переиспользовать свободные соединения, но если их нет, то создаёт новое, то тогда он не спасёт от запуска слишком большого числа бэкендов.
источник

dg

denis g in pgsql – PostgreSQL
Понял, спасибо
источник

ВК

Виталий Кухарик... in pgsql – PostgreSQL
denis g
День добрый, а можно по детальней плз, зачем пул БД когда есть пул приложения?
По той же причине, экономия на количестве воркеров на стороне СУБД - уменьшение кол переключений контекста , ProcArrayLock`s, backend forks ...
Если у Вас 1 или 2 бэкэнда с десятком соединений, то можно и напрямую к субд. Но если у Вас, к примеру, микросервисная архитектура, и таких бэкэндов (со своими пулами) десятки и сотни, Вы получите огромное кол простаивающих (idle) сессий на стороне БД.
В общем, при большом количестве соединений (как правило больше чем количество физических ядер CPU в системе), запросы начинают работать медленней чем могли бы.
источник

ВК

Виталий Кухарик... in pgsql – PostgreSQL
Нужен мониторинг, отслеживать сколько фактических активных соединений (за период времени, чтобы учесть пиковые нагрузки).

Пример:
источник

ВК

Виталий Кухарик... in pgsql – PostgreSQL
источник

ВК

Виталий Кухарик... in pgsql – PostgreSQL
Total 19, но фактически используется до 5-и воркеров. Плохо когда "серых" - idle сотни и тысячи...
источник

dg

denis g in pgsql – PostgreSQL
Не, у нас не микро сервисы, и макс соединение 20 штук)
Пул только на приложении
источник

B

Boris in pgsql – PostgreSQL
Mgramin
Всем привет, а насколько плохая идея для микросервисной системки (размера чуть больше среднего) использовать один общий инстанс(кластер) PG, но с отдельной БД для каждого сервиса? Какие от этого могут быть плюсы и минусы?
У нас сейчас так и мы выросли из этого горшочка. Проблема №1 - когда один сервис обрастает траффиком, он начинает пожирать больше connection pools в pgbouncer, соответственно больше active connections в PG, а один инстанс ограничен в max active connections по кол-ву RAM (как например в GCP), проблема №2 - вертикальное масштабирование инстанса кладёт все базы, если используете pgbouncer, то можно поставить на паузу, но в зависимости от траффика, может накопиться очень много запросов. Проблема №3 - апгрейд одной базы допустим с PG 9 на PG 12 может иметь несовместимости и тогда придётся писать миграции на все базы одним махом, а не мигрировать по одной. Мы рассматриваем вариант Patroni+Spilo от Zalando, но есть проблемы с их postgres-operator, он выкатывает всего один connection pooler и мы пока не понимаем как разделять read/write стримы (как коннектиться к мастеру или слейву) через этот пулер.
источник

Ю

Юрий in pgsql – PostgreSQL
можно переность по одной безе с 9 на 12 и переключать аппликейшены , начиная с небольших баз, ну и разносить на отдельные инстанцы если нужно, отделить  можно только большие БД.
источник

ЕJ

Евгений Jen in pgsql – PostgreSQL
hi all
how add duplicate id
a left join b
a1 b1
a1 b2
a1 b3
a2 b4
a2 b5
——
but i need
a1 1 b1
a1 2 b2
a1 3 b3
a2 1 b4
a2 2 b5
источник

VY

Victor Yegorov in pgsql – PostgreSQL
Евгений Jen
hi all
how add duplicate id
a left join b
a1 b1
a1 b2
a1 b3
a2 b4
a2 b5
——
but i need
a1 1 b1
a1 2 b2
a1 3 b3
a2 1 b4
a2 2 b5
row_number() OVER (PARTITION BY col1 ORDER BY col2) ?
источник

ЕJ

Евгений Jen in pgsql – PostgreSQL
thanks, PARTITION BY working for me
cool 🔥👍💪
источник

К

Канат in pgsql – PostgreSQL
Всем привет. Не подскажете как добавить значение в проверке check ?
type project_type DEFAULT 'regional' CHECK (type = 'regional')
источник

dg

denis g in pgsql – PostgreSQL
Boris
У нас сейчас так и мы выросли из этого горшочка. Проблема №1 - когда один сервис обрастает траффиком, он начинает пожирать больше connection pools в pgbouncer, соответственно больше active connections в PG, а один инстанс ограничен в max active connections по кол-ву RAM (как например в GCP), проблема №2 - вертикальное масштабирование инстанса кладёт все базы, если используете pgbouncer, то можно поставить на паузу, но в зависимости от траффика, может накопиться очень много запросов. Проблема №3 - апгрейд одной базы допустим с PG 9 на PG 12 может иметь несовместимости и тогда придётся писать миграции на все базы одним махом, а не мигрировать по одной. Мы рассматриваем вариант Patroni+Spilo от Zalando, но есть проблемы с их postgres-operator, он выкатывает всего один connection pooler и мы пока не понимаем как разделять read/write стримы (как коннектиться к мастеру или слейву) через этот пулер.
У нас конечно все игрушечных размеров, но разделение read only VS write есть в самом приложении которое берет соединение ито из одного то из другого пула
источник

B

Boris in pgsql – PostgreSQL
denis g
У нас конечно все игрушечных размеров, но разделение read only VS write есть в самом приложении которое берет соединение ито из одного то из другого пула
Это при условии что вы используете patroni?
источник

SB

Sergey Bubnov in pgsql – PostgreSQL
Всем привет, а подскажите, какой правильно поставить индекс на запрос, где explain analyze показа следующее

->  Parallel Seq Scan on aggregate_matches m  (cost=0.00..956907.79 rows=3 width=439) (actual time=13329.856..45352.223 rows=14 loops=3)
 Filter: ((answer_func_id IS NOT NULL) AND (answer_act_id IS NULL) AND (source_qual_id = 1116) AND (answer_qual_id = 1116) AND (source_qual_type = 'q_core'::text) AND (answer_qual_type = 'q_core'::text))
источник