Size: a a a

pgsql – PostgreSQL

2021 February 10

YS

Yaroslav Schekin in pgsql – PostgreSQL
Kino Recovery
добрый, у меня вопрос: при bulk insert, если указан on conflict не вставляетьтся строка с конфликтом или весь insert ?
А что такое "bulk insert"?
источник

IC

Igor Chizhov in pgsql – PostgreSQL
Yaroslav Schekin
А что такое "bulk insert"?
Трудности перехода с  MS SQL 😁
источник

АМ

Алексей Мукин... in pgsql – PostgreSQL
Добрый день. Есть 100 сущностей. У всех сущностей десяток одинаковых полей, и от 1 до десятка разных полей (если провести аналогию с ООП это один родительский класс и 100 наследников).
Опытные товарищи, подскажите, как лучше спроектировать БД на postgreSQL? Сделать 100 таблиц с десятком одинаковых полей в каждой, сделать 100 таблиц с уникальными полями и 1 базовую таблицу с общими полями, или сделать одну таблицу с 100+ полями?
источник

AL

Alexey Lesovsky in pgsql – PostgreSQL
Viktor Grigorev
Сделал flamegraph 1 минуты системы. Там 50%+ pg_plan_query и внутри него get_relation_info -> FileSeek -> do_sys_open, который возможно и вызывает высокий sys%. Почему-то hash_search_with_hash_value всего 2%

https://yadi.sk/i/8kbAG3J_2jrmYA
подумайте над вариантами как уменьшить количество партиций (понятно что задача не на 5 минут) - желательно сделать где-то сбоку тестовый стенд где можно легко воспроизводить проблему и проверять гипотезы

рассмотрите вариант перехода на pg 12 или 13, там были значительные улучшения в плане партиционирования как раз для случаев с тысячами партиций (опять же с предварительной проверкой на тестовом стенде)
источник

VG

Viktor Grigorev in pgsql – PostgreSQL
спасибо, смотрю уже в сторону апгрейда
источник

A

Alexey in pgsql – PostgreSQL
Коллеги, добрый день.

Есть таблица вида
id | key (unique constraint) | occurance

Нужно увеличивать occurance на единицу для строки, если вставляется строка с существующим key.

Наивное решение сделать это средствами pg используя upsert on conflict.

Количество вставок предполагается до ~2k/sec. Предполагаемое количество конфликтов при вставке ~50%.

Вопрос: нормально ли переживет pg около 1000 обновлений в секунду. Если да, то нужно ли сразу смотреть в сторону уменьшения fillfactor?
источник

YS

Yaroslav Schekin in pgsql – PostgreSQL
Viktor Grigorev
спасибо, смотрю уже в сторону апгрейда
И всё равно не стоит тысячи partitions использовать (т.е. в 12/13 стало не так плохо, как раньше, вот и всё).
источник

YS

Yaroslav Schekin in pgsql – PostgreSQL
Alexey
Коллеги, добрый день.

Есть таблица вида
id | key (unique constraint) | occurance

Нужно увеличивать occurance на единицу для строки, если вставляется строка с существующим key.

Наивное решение сделать это средствами pg используя upsert on conflict.

Количество вставок предполагается до ~2k/sec. Предполагаемое количество конфликтов при вставке ~50%.

Вопрос: нормально ли переживет pg около 1000 обновлений в секунду. Если да, то нужно ли сразу смотреть в сторону уменьшения fillfactor?
Сгенерируйте тестовые данные да и померяйте, на своём железе / нагрузке / ситуации, да и всё.
источник

A

Alexey in pgsql – PostgreSQL
Yaroslav Schekin
Сгенерируйте тестовые данные да и померяйте, на своём железе / нагрузке / ситуации, да и всё.
Да, но я  хотел услышать еще об опыте других людей.
источник

K

Kino Recovery in pgsql – PostgreSQL
Igor Chizhov
Трудности перехода с  MS SQL 😁
тут скорее "трудности перевода c orm)) bulk insert это когда мы одним insertom пушем несколько записей.
insert into tt (text) values ('So now, eins zwei drei' ),('Soon we will synchronize'),('So now, eins zwei drei'),('Escaping our demise');
источник

AL

Alexey Lesovsky in pgsql – PostgreSQL
Alexey
Коллеги, добрый день.

Есть таблица вида
id | key (unique constraint) | occurance

Нужно увеличивать occurance на единицу для строки, если вставляется строка с существующим key.

Наивное решение сделать это средствами pg используя upsert on conflict.

Количество вставок предполагается до ~2k/sec. Предполагаемое количество конфликтов при вставке ~50%.

Вопрос: нормально ли переживет pg около 1000 обновлений в секунду. Если да, то нужно ли сразу смотреть в сторону уменьшения fillfactor?
> Вопрос: нормально ли переживет pg около 1000 обновлений в секунду.

тут отчасти производительность будет зависесть от дисковой подсистемы - по идее если такой поток записи более/менее постоянен, то диски должны вывозить и саму запись и периодически выполняющиеся фоновые чекпоинты во время которых может проседать производительность основных инсертов. поэтому если будете делать тесты, делайте их продолжительные по времени (10-20-30 минут)
источник

A

Alexey in pgsql – PostgreSQL
Alexey Lesovsky
> Вопрос: нормально ли переживет pg около 1000 обновлений в секунду.

тут отчасти производительность будет зависесть от дисковой подсистемы - по идее если такой поток записи более/менее постоянен, то диски должны вывозить и саму запись и периодически выполняющиеся фоновые чекпоинты во время которых может проседать производительность основных инсертов. поэтому если будете делать тесты, делайте их продолжительные по времени (10-20-30 минут)
Хорошо, спасибо!
источник

AL

Alexey Lesovsky in pgsql – PostgreSQL
Alexey
Да, но я  хотел услышать еще об опыте других людей.
вцелом есть инсталляции где 2k инсертов не проблема, да и железо тоже не сказать что космос
источник

A

Alexey in pgsql – PostgreSQL
Alexey Lesovsky
вцелом есть инсталляции где 2k инсертов не проблема, да и железо тоже не сказать что космос
тут скорее вопрос в обновлениях, на другом проекте вставлял тоже 2-3к и все было ок.
источник

YS

Yaroslav Schekin in pgsql – PostgreSQL
Alexey
Да, но я  хотел услышать еще об опыте других людей.
Вы понимаете, что у некоторых людей "железо" на том, что они называют "сервером" похуже, чем в любом современном смартфоне; а у других, например (первое, что вспомнилось) 1.5 TB, 40 cores, 512G ram, 10 SSD x RAID10 — это "базовый" сервер под любой новый кластер (т.е. таких много "в запасе")?
И вот толку Вам от этого? ;)
источник

A

Alexey in pgsql – PostgreSQL
Yaroslav Schekin
Вы понимаете, что у некоторых людей "железо" на том, что они называют "сервером" похуже, чем в любом современном смартфоне; а у других, например (первое, что вспомнилось) 1.5 TB, 40 cores, 512G ram, 10 SSD x RAID10 — это "базовый" сервер под любой новый кластер (т.е. таких много "в запасе")?
И вот толку Вам от этого? ;)
Понимаю, но можно попробовать аппроксимировать чужие цифры на свои.
источник

YS

Yaroslav Schekin in pgsql – PostgreSQL
Kino Recovery
тут скорее "трудности перевода c orm)) bulk insert это когда мы одним insertom пушем несколько записей.
insert into tt (text) values ('So now, eins zwei drei' ),('Soon we will synchronize'),('So now, eins zwei drei'),('Escaping our demise');
Тогда ответ — только/каждая строка.
Но не так, как в Вашем примере — ON CONFLICT не для устранения дубликатов во вставляемых данных, а только для случая, когда вставляемые данные дублируют те, что уже есть в БД.
источник

K

Kino Recovery in pgsql – PostgreSQL
Yaroslav Schekin
Тогда ответ — только/каждая строка.
Но не так, как в Вашем примере — ON CONFLICT не для устранения дубликатов во вставляемых данных, а только для случая, когда вставляемые данные дублируют те, что уже есть в БД.
спасибо, мне нужна именно дедупликация данных  с теми которые уже есть в базе, и вот я думал, тянуть таблицу в приложение  и убирать дубли там или возложить дедупликацию на бд
источник

DS

Daniella Starchenko in pgsql – PostgreSQL
Привет. Получаю такую ошибку в логах  Executed roolback on connection org.postgresql.jdbc.PgConnection@ due to dirty commit state close.

может ли она возникать из-за нехватки места на диске? или какие еще причины?
источник

YS

Yaroslav Schekin in pgsql – PostgreSQL
Daniella Starchenko
Привет. Получаю такую ошибку в логах  Executed roolback on connection org.postgresql.jdbc.PgConnection@ due to dirty commit state close.

может ли она возникать из-за нехватки места на диске? или какие еще причины?
Это точно не postgres-овская ошибка, по крайней мере.
Можно там как-то узнать, что выдал PostgreSQL (ну или в его логах посмотрите, если там вообще что-то есть)?
источник