Size: a a a

pgsql – PostgreSQL

2021 February 24

MM

Max Mokryi in pgsql – PostgreSQL
32гига - ну это уже как-бы и немного.... Если тяжелые запросы идут. Может индесы нужно создать, чтобы оно не занималось тупым сканом.
источник

XZ

X Z in pgsql – PostgreSQL
Может, но то что в 90% работает и 32 гига, куда точно все помещается в этих 90 %, заставляет сомневаться. В данный момент с винды не слезть.
источник

MM

Max Mokryi in pgsql – PostgreSQL
pg_trgm используйте, если юзаете что-то типа ilike '%some%'
источник

MM

Max Mokryi in pgsql – PostgreSQL
Вообще нужно explain запроса посмотреть. У меня как-то отчетик строился по 60-80 секунд.... А просмотрели explain, добавили 2 индекса - 1,5 сек и без дикой нагрузки на машину
источник

MM

Max Mokryi in pgsql – PostgreSQL
Вообще count(*) это как-бы зло....
источник

XZ

X Z in pgsql – PostgreSQL
Max Mokryi
32гига - ну это уже как-бы и немного.... Если тяжелые запросы идут. Может индесы нужно создать, чтобы оно не занималось тупым сканом.
При корретной отработке нет такой утилизации памяти, даже близко, проверим ещё раз. У меня предложение, что баг, но опять же, необходимо ещё мнение, потому, что вероятность, что это баг, не решает проблемы :(
источник

YS

Yaroslav Schekin in pgsql – PostgreSQL
X Z
При корретной отработке нет такой утилизации памяти, даже близко, проверим ещё раз. У меня предложение, что баг, но опять же, необходимо ещё мнение, потому, что вероятность, что это баг, не решает проблемы :(
Почему "не решает"? Можно обновить postgres. Вообще, с этого стоит начать.
источник

XZ

X Z in pgsql – PostgreSQL
Max Mokryi
Вообще count(*) это как-бы зло....
Согласен, над этим поработаем.
источник

XZ

X Z in pgsql – PostgreSQL
Max Mokryi
pg_trgm используйте, если юзаете что-то типа ilike '%some%'
Like не используется в запросе.
источник

MM

Max Mokryi in pgsql – PostgreSQL
Вместо select count(*) нужно делать триггера, которые считают нужные циферки в процессе добавления/удаления строк. В итоге потом читается одна запись по уникальному ключу вместо тупого подсчета
источник

XZ

X Z in pgsql – PostgreSQL
Yaroslav Schekin
Почему "не решает"? Можно обновить postgres. Вообще, с этого стоит начать.
Ну мы не нашли в новых версиях упоминания о исправлении такого типа бага. Новые версии тоже отработаем. Спасибо.
источник

MM

Max Mokryi in pgsql – PostgreSQL
Повечили триггер на insert/delete, который after просто инкрементит или декрементит одну запись и все. У меня так с 2003 года у людей баланс подсчитывается базой на-лету. И спокойно делаются insert/update/delete и баланс сохраняется клиенту. Не нужно его считать на стороне программного обеспечения. Простая магия триггеров
источник

XZ

X Z in pgsql – PostgreSQL
Max Mokryi
Повечили триггер на insert/delete, который after просто инкрементит или декрементит одну запись и все. У меня так с 2003 года у людей баланс подсчитывается базой на-лету. И спокойно делаются insert/update/delete и баланс сохраняется клиенту. Не нужно его считать на стороне программного обеспечения. Простая магия триггеров
Интересная тема, нам же для этого хорошо покодить придется, это не быстро, но как самый последний вариант подойти должен.
источник

XZ

X Z in pgsql – PostgreSQL
Я где-то в чертогах держал мысль, о том, что так падать БД точно не должна, отсюда и вопросы в эту аудиторию.
источник

YS

Yaroslav Schekin in pgsql – PostgreSQL
X Z
Ну мы не нашли в новых версиях упоминания о исправлении такого типа бага. Новые версии тоже отработаем. Спасибо.
https://why-upgrade.depesz.com/show?from=12.3&to=12.6
А шанс того, что с вами случатся остальные 177, не волнует? Что ж, оригинально. ;)
источник

MM

Max Mokryi in pgsql – PostgreSQL
Я, честно говоря, не представляю, что заставляет count(*) писать в подзапросах
источник

XZ

X Z in pgsql – PostgreSQL
Max Mokryi
Я, честно говоря, не представляю, что заставляет count(*) писать в подзапросах
Legacy :(
источник

XZ

X Z in pgsql – PostgreSQL
Yaroslav Schekin
https://why-upgrade.depesz.com/show?from=12.3&to=12.6
А шанс того, что с вами случатся остальные 177, не волнует? Что ж, оригинально. ;)
Волнует, проработаем.
источник

YS

Yaroslav Schekin in pgsql – PostgreSQL
X Z
Коллеги, доброго времени.

Вероятно в этом чате есть гуру и эксперты,
которые помогут подсказать направление куда копать, в какую сторону,
заранее спасибо!

Получаем вот такую ошибку:

org.postgresql.util.PSQLException: ERROR: out of memory
Подробности: Failed on request of size 8 in memory context "Subplan HashTable Temp Context".

В одной из сессий происходит выполнение составного запроса типа select столбцы, а также подселекты с count(*) как виртуальные столбцы из связки представлений и таблиц с условиями,
в условиях есть сравнение значений в подселектами с count(*).

При этом Postgres ( этот процесс ) съедает всю память на сервере (до 32 GB) и ввиду этого отстреливает всех пользователей с ошибкой:
[i]WARNING:  terminating connection because of crash of another server process
The postmaster has commanded this server process to roll back the current transaction and exit, because another server process exited abnormally and possibly corrupted shared memory.

Детали, если важны:
1.      Запрос выполняется успешно практически всегда без последствий, исключение до 10% - оно печальное, как описано выше.
2.      Редакция PostgreSQL — свободная, версии 12.3
3.      Платформа Windows 2008/2016
4.      Данных в связке из представлений и таблиц в строках не так много, не если учитывать условия, то   300 000, 180 000, 3 000 000, и 50  строк, если с условиями – результат до 5000 строк

Вопрос - как лечить такую ошибку?

Спасибо,
P.S. в дополнительной информации о данных ограничены со стороны информационной безопасности.
А вообще, после того, как обновитесь, если это случится снова, то нужно искать причины — в логи postgres заглянуть, например.
Потому что вот это "because another server process exited abnormally and possibly corrupted shared memory" — либо [грубая] ошибка настройки OS (если это OOM kill), либо баг в PostgreSQL или каком-то extension, других вариантов нет.
источник

XZ

X Z in pgsql – PostgreSQL
X Z
Волнует, проработаем.
Спасибо
источник