@pgsql

Страница 596 из 1062
/dev/null
07.12.2017
00:39:24
в text возможно скастить надо
Угу, именно так и надо было PERFORM pg_notify('watchers', cast(NEW.id || ', '|| NEW.fam AS text));

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

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

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

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

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
Думаю я не правильно выразился. Есть 15к работающих пользователей, все они что то делают, отправляют запросы на сервер. И может случиться такая ситуация, что скажем 8к пользователей одновременно захотят что то сделать. В этом случае производительность не должна катастрофически просесть
такое единовременное воляизъявление возможно только на выборах, реально 15к работающих пользователей != 15к rps. Смотрите на текущий профиль нагрузки, сделайте перформанс тесты и посмотрите, но, обычно, PostgreSQL достаточно много "держит".

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

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

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

Pavel
07.12.2017
13:36:10
а откуда берётся в изначальном посте "1-2 сек на запрос" вообще?
это в пиках нагрузки. запрос должен отрабатывать не более 1-2 сек (это гипотетические цифры). запрос на самом деле простой. 4-5 джоинов + фильтрация по наименованию лайком. Спасибо всем. В общем будем пробовать, и смотреть что получится.

Каждый день одна из таблиц растет более чем на 1 млн записей -- полет на одном сервере нормальный. ;)
Alexander , а сколько пользователей работает с вашей БД. Какое максимальное колличество коннектов разрешено?

Alexander
07.12.2017
13:53:04
Alexander , а сколько пользователей работает с вашей БД. Какое максимальное колличество коннектов разрешено?
Разрешено 1000, но из-за того, что запросы выполняются очень быстро, количество активных редко скачет выше 20. Средняя нагрузка около 6-8k TPS.

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

Andrey ?
07.12.2017
14:56:19


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

Andrey ?
07.12.2017
15:00:13
Насколько я вижу, вы пытаетесь создать отношение раньше, чем существует таблица groups
Ого. Даже не подумал бы, что это критично. Вы правы. Спасибо.

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:11:26
Не не не. Я только учусь. Хочу ручками все пописать.
Да даже когда научитесь всё равно лучше ручками )

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;

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
Всем привет! Есть колонка, числовая, в ней возрастающие значения. Нужно найти все пропуски. Напрмер, идут значения 1,2,5,6. 3 и 4 - это пропуски
Если данных много и поле индесировано, можно ещё попробовать что-нибудь с оконными функциями.

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?

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

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

и забивается

Yaroslav
08.12.2017
12:33:46
Насколько я понимаю, это пг не дропает коннекты, которые неактивны, max_connection стоит 100
А разве это дело PostgreSQL в этой конфигурации? Я думал, что pgbouncer должен сам этим управлять...

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
можно увеличить эту цифру, к примеру до 100-200 и изменить мод
А Вы уверены, что в transaction pooling mode приложения вообще смогут работать?

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

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

Dmitry
08.12.2017
12:44:28
А Вы уверены, что в transaction pooling mode приложения вообще смогут работать?
У нас работает, но мы специально адаптировали приложение

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

Yaroslav
08.12.2017
12:45:54
чем transaction мод может сломать приложение?
Это описано в FAQ pgbouncer. Вы что, на production хотите так экспериментировать? ;)

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
пока на деве, но иногда приходится перезапускать контейнер с Postgres, когда забьются коннекты
Ну так лучше разберитесь, почему это происходит. Может, Ваши приложения не закрывают соединения, или, хуже того, транзакции. ;)

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
Сколько баз у вас в кластере?

Учитывайте, что если на серваке несколько баз, то число коннектов= количество БД * размер пула

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