
/dev/null
07.12.2017
00:39:24

Roman
07.12.2017
08:01:17
За юзера А создал словарь и конфигурацию, как дать возможность пользоваться ими юзеру Б ? изменить владельца pg_ts_config / pg_ts_dict ?

Nikita
07.12.2017
12:24:37
ребят, всем привет!
подскажите пожалуйста, есть такой кейс: на сервере стояла неправильная таймзона, следовательно поля created_at имеют значение времени на 1 час меньше, чем нужно. нужно в конкретной базе обновить во всех таблицах поля типа timestamp without time zone (увеличить на 1 час)
кто-то может подсказать, как это сделать максимально просто?)

Google

Pavel
07.12.2017
12:44:45
Добрый день!
Господа, помогите советом.
Есть 15000 одновременно работающих пользователей (очень грубо говоря 8000 запросов в секунду). 70% читают 30% инсертят. Данных пока 2-3 млн записей. Нужно сделать чтобы Postgre выжил от таких нагрузок и возвращал/вставлял данные за приемлемеое время (1-2 сек на запрос).
Думаем размазать данные на шарды, каждую шарду реплицировать, писать в мастер, читать со слэйвов. И видим два варианта как к этому подойти:
1. Переложить на всю логику доступа к шардам на приложение. Чтобы оно могло в явном виде писать данные в нужный шард и читать из нужного шарда.
2. Поднять кластер Postgres-XL + pgpool.
Буду весьма признателен если сможете посоветовать в какую сторону лучше смотреть.
Быть может проблема надумана и с этим справится и один инстанс?
Заранее благодарю!

Kirill
07.12.2017
12:48:58

Vadim
07.12.2017
12:49:19
1 вариант конечно должен быть

Sergey
07.12.2017
12:52:03

Andrey
07.12.2017
12:54:33


Sergey
07.12.2017
12:55:01
Для десктопа с не очень старым Intel процессором и пользовательским SSD pgbench даёт >4000 tps на ядро.

Pavel
07.12.2017
12:55:36
Очень грубо говоря, получается что ваше приложение работало ~20 минут ?
Думаю я не правильно выразился. Есть 15к работающих пользователей, все они что то делают, отправляют запросы на сервер. И может случиться такая ситуация, что скажем 8к пользователей одновременно захотят что то сделать. В этом случае производительность не должна катастрофически просесть

Kirill
07.12.2017
13:00:10

Константин
07.12.2017
13:09:35


Pavel
07.12.2017
13:13:03
Ок. Спасибо.
Скорее всего я преувеличиваю и реально в один момент времени будет 500-1000 транзакций, и наверное с этим справится и один интсанс.
Но все-таки интересен момент с шардированием. Скажем данные будут прирастать очень быстро (500к в неделю), данные можно разделить по категориям и раскинуть на шарды.
Видел реализацию шардирования через вьюху на основной ноде (чтение и запись через нее). Нормально ли использовать такой вариант, или все-таки заморачиваться и городить все это в аппликейшене.
В целом хотелось бы, чтобы для приложения все шарды выступали как один инстанс БД. Не размазывать управление шардами между приложением и СУБД.

Darafei
07.12.2017
13:16:25

Айтуар
07.12.2017
13:16:28

Darafei
07.12.2017
13:16:43
какие запросы у вас настолько медленные?

Google

Айтуар
07.12.2017
13:18:07

Yaroslav
07.12.2017
13:19:51

Alexander
07.12.2017
13:21:39

Петр
07.12.2017
13:34:53
Посмотрите, может в вашем случае можно смаштабировать с помощью plproxy

Pavel
07.12.2017
13:36:10

Alexander
07.12.2017
13:53:04
Таблица, о которой я писал вам выше, сейчас содержит около 220 млн записей. По ней постоянно идут маленькие join и достаточно обильно добавляются новые записи. Если хотите - напишите в лс, чуть подробнее расскажу о ситуации и нагрузке :)

Andrey ?
07.12.2017
14:56:19

Alexander
07.12.2017
14:58:31
Насколько я вижу, вы пытаетесь создать отношение раньше, чем существует таблица groups

Andrey ?
07.12.2017
15:00:13

Alexander
07.12.2017
15:00:28
Поэтому либо:
1. Создайте сначала groups, а потом те таблицы, чьи поля будут ссылаться на поля из groups
2. Создайте связь между полями отдельно внизу, уже после создания всех таблиц, которые там используются
Пожалуйста ;)

Andrey ?
07.12.2017
15:01:13
За второй совет отдельное спасибо)

Alexander
07.12.2017
15:04:07
За второй совет отдельное спасибо)
Пожалуйста. Кстати, IntelliJ позволяет вам изменять схему таблицы с помощью красивого GUI, ниже создавая соответствующий SQL-запрос, который сделает все то, что вы "накликали" руками. ;)

Andrey ?
07.12.2017
15:04:55

Andrey
07.12.2017
15:11:26

Andrey ?
07.12.2017
15:11:56

Denis
07.12.2017
15:23:03
Привет всем. У меня вопрос: есть две бд с одинаковой схемой. В одной (к примеру бд2) есть данные за все время до вчера. В другой (бд1) есть данные за все время + риалтайм данные за сегодня и тп. Как перенести разницу данных на бд2 с бд1?

Аггей
07.12.2017
15:27:16
Думаю только полным дампом с бд1

Google

Сергей
07.12.2017
15:29:47
По дате фильтрануть и залить через fdw

Alexander
07.12.2017
15:32:57
да можно и копи сделать с условием по дате.

Roman
08.12.2017
07:09:27
Подскажите пожалуйста, почему конфиги/словари для fts не видны в другой базе от одного и того же юзера ? хотя в pg_ts_config / pg_ts_dict dictowner совпадает с id юзера

Arthur
08.12.2017
08:24:33

Roman
08.12.2017
08:25:30
Да, уже разобрался, а через схемы можно как-нибудь сделать "общие" конфиги/словари для разных баз?

Arthur
08.12.2017
08:27:07
по-моему тоже нельзя, т.к. схемы тоже не шарятся между базами

Mikhail
08.12.2017
11:43:24
Всем привет! Есть колонка, числовая, в ней возрастающие значения. Нужно найти все пропуски. Напрмер, идут значения 1,2,5,6. 3 и 4 - это пропуски

Arthur
08.12.2017
11:46:52
Что-то типа
select i from generate_series(1,6) s(i)
except
select id from table;

Ildar
08.12.2017
11:46:56

Mikhail
08.12.2017
11:47:11

Alex
08.12.2017
11:47:34
с except может быть быстрее, не ?

Ildar
08.12.2017
11:48:37
except похоже хорошая штука, не знал про нее

@Bv
08.12.2017
11:49:51
если значения не повторяются лучше делать except all

Yaroslav
08.12.2017
12:09:54

Mikhail
08.12.2017
12:10:22

Andrey
08.12.2017
12:23:47

Mike Chuguniy
08.12.2017
12:27:15

Yaroslav
08.12.2017
12:27:19

Denis
08.12.2017
12:28:04
Привет всем. Кто сталкивался с Sorry. Too many clients already. с Postgres 9.6 в докере + PgBouncer?

Yaroslav
08.12.2017
12:29:57

Google

Denis
08.12.2017
12:30:11
Как это пофиксить?

Andrey
08.12.2017
12:30:21

Denis
08.12.2017
12:30:47
Насколько я понимаю, это пг не дропает коннекты, которые неактивны, max_connection стоит 100
и забивается

Yaroslav
08.12.2017
12:33:46

Denis
08.12.2017
12:35:00
Может быть старый PgBouncer

Yaroslav
08.12.2017
12:38:55
Может быть старый PgBouncer
Ну а Вы логи PgBouncer-а смотрели? А если в его консоли попробовать посмотреть SHOW CLIENTS / SERVERS / POOLS и т.п.?

Dmitry
08.12.2017
12:38:56
Какой размер пула на pgbouncer ?

Denis
08.12.2017
12:39:33
дефолтный, он тоже в контейнере

Dmitry
08.12.2017
12:40:33
А можно цифру узнать? И сравнить с max_connection. А то libastral не подгружается...

Denis
08.12.2017
12:41:16
сейчас вскрою конфиги
может стоит переключить pool_mode с session на transaction
?
default_pool_size = 20
можно увеличить эту цифру, к примеру до 100-200 и изменить мод

Dmitry
08.12.2017
12:43:21
И чем это поможет?

Yaroslav
08.12.2017
12:43:47

Dmitry
08.12.2017
12:43:54
Если у вас есть prepared транзакции вы рискуете сломать приложение

Denis
08.12.2017
12:44:13
нет, предполагаю

Dmitry
08.12.2017
12:44:28

Google

Denis
08.12.2017
12:45:09
чем transaction мод может сломать приложение?

Yaroslav
08.12.2017
12:45:54

Denis
08.12.2017
12:46:59
пока на деве, но иногда приходится перезапускать контейнер с Postgres, когда забьются коннекты

Dmitry
08.12.2017
12:47:28
Количество max_connecntion должно быть больше default_pool_size. Иначе вы получите то, что получаете.
А вы уверены, что у вас приложение ходит через баунсер? show fds что показывает?

Yaroslav
08.12.2017
12:48:17

Denis
08.12.2017
12:48:18
уверен

Dmitry
08.12.2017
12:49:24
Значит вам надо понять, что потребляет коннекты. При размере пула 20 у вас не может быть больше 20 коннектов на БД от баунсера к базе

Denis
08.12.2017
12:49:25
Фреймворк должен это делать, покрайне мере в доках так написано =)
спасибо, смотрю

Dmitry
08.12.2017
12:50:17
Сколько баз у вас в кластере?
Учитывайте, что если на серваке несколько баз, то число коннектов= количество БД * размер пула