Size: a a a

pgsql – PostgreSQL

2020 June 09

л

линкер in pgsql – PostgreSQL
Vasiliy Gusel
Ну если на скорую руку могу предложить такой вариант: SELECT text FROM messages WHERE created_at = (SELECT MAX(created_at) FROM messages WHERE peer_id = $1 AND peer_id = $2);
не получается, к сожалению. хотя похоже на самый лучший вариант..
источник

VG

Vasiliy Gusel in pgsql – PostgreSQL
Возможно я имена напутал) у меня сработало, в общем запросом берешь максимальный тайминг у конкретных пиров и по нему зпрашиваешь текст
источник

s

sexst in pgsql – PostgreSQL
ФСБ Беларуси
привет.
хочу поставить postgresql на ssd, но при этом хочу не убить быстро ресурс ssd. есть идеи? (СУБД будет обслуживать 10 мелких сайтиков, nextcloud и gitlab)
Из ресурсов хост-системы (proxmox)  - Intel DC S4500 480 GB в RAID 1  + Toshiba P300 2TB в RAID 1

я так понимаю, нужно выносить на HDD WAL / pg_stat_tmp / pg_stat?
Wal можно выносить точно ибо он пишется строго последовательно, рандомных иопсов не вызывает.
Можно ещё директорию под temporary tables на рамдиск положить (именно так на блочный рамдиск чтобы гарантировать того, что этот объём памяти никуда не используется и не потребуется его внезапно освобождать, скидывая на диск dirty pages. Хотя тут можно спорить долго)
источник

л

линкер in pgsql – PostgreSQL
Vasiliy Gusel
Возможно я имена напутал) у меня сработало, в общем запросом берешь максимальный тайминг у конкретных пиров и по нему зпрашиваешь текст
не работает с AND почему то.. но без него все выбирается замечательно..
источник

л

линкер in pgsql – PostgreSQL
Vasiliy Gusel
Возможно я имена напутал) у меня сработало, в общем запросом берешь максимальный тайминг у конкретных пиров и по нему зпрашиваешь текст
источник

YS

Yaroslav Schekin in pgsql – PostgreSQL
sexst
Wal можно выносить точно ибо он пишется строго последовательно, рандомных иопсов не вызывает.
Можно ещё директорию под temporary tables на рамдиск положить (именно так на блочный рамдиск чтобы гарантировать того, что этот объём памяти никуда не используется и не потребуется его внезапно освобождать, скидывая на диск dirty pages. Хотя тут можно спорить долго)
Почему бы тогда просто максимально не "зажать" temporary files?
Я к тому, что когда этот RAM disk переполнится, результат будет примерно тот же...
источник

л

линкер in pgsql – PostgreSQL
в любом случае спасибо большое за решение.. буду искать дальше
источник

VG

Vasiliy Gusel in pgsql – PostgreSQL
линкер
не работает с AND почему то.. но без него все выбирается замечательно..
OR))
источник

л

линкер in pgsql – PostgreSQL
or возвращает один обьект
источник

л

линкер in pgsql – PostgreSQL
а нужно на каждый пир по одному сообщению
источник

YS

Yaroslav Schekin in pgsql – PostgreSQL
линкер
привет.
помогите пожалуйста новичку составить sql запрос.. есть таблица messages. я знаю только два peer_id и мне необходимо получить по одному последнему сообщению из каждого пира. думаю применить сортировку по created_at и как нибудь прикрутить LIMIT, но совсем ничего не получается..
Да погуглите по groupwise maximum (или поищите в истории чата, я тут когда-то около десятка вариантов решения приводил).
источник

s

sexst in pgsql – PostgreSQL
Yaroslav Schekin
Почему бы тогда просто максимально не "зажать" temporary files?
Я к тому, что когда этот RAM disk переполнится, результат будет примерно тот же...
Я что-то вопрос не очень понял.
Если что, то я про pgsql_tmp. Можно, конечно, просто выкрутить work_mem настолько, что туда ничего/почти ничего писаться не будет, но тогда мы будем на каждый коннект память выделять, независимо от того нужна она или нет. Сунуть pgsql_tmp на приемлемый по размеру рамдиск (можно ещё и со сжатием) выльется в "чуть медленнее", зато предсказуемо по потреблению памяти, и ,в большинстве случаев, такой подход может немало оперативки сэкономить.
Хотя, как я сказал, холиварно, ситуации бывают разные. Кому-то случается и под 40-50G в этой директории заиметь.
источник

s

sexst in pgsql – PostgreSQL
Можно, конечно, просто оттюнить work_mem по месту, но тогда нужно постоянно следить хватает ли её, чтобы не началась однажды интенсивная запись на диски при каждом втором запросе с сортировкой или большими временными таблицами.
источник

ФС

Федор Сигаев... in pgsql – PostgreSQL
blkmrkt
Ребят, а еще не сделали int8 версию этого модуля? https://www.postgresql.org/docs/12/intarray.html

Может быть авторы в этом чате находятся?
Я когда-то предлагал обобщение intarray до anyarray. Отказались, валяется где-то на коммитфестах. Не возражаю, если кто-нибудь поднимет знамя
источник

b

blkmrkt in pgsql – PostgreSQL
Федор Сигаев
Я когда-то предлагал обобщение intarray до anyarray. Отказались, валяется где-то на коммитфестах. Не возражаю, если кто-нибудь поднимет знамя
Благодарю, похоже нашел его: https://commitfest.postgresql.org/4/145/
источник

л

линкер in pgsql – PostgreSQL
Yaroslav Schekin
Да погуглите по groupwise maximum (или поищите в истории чата, я тут когда-то около десятка вариантов решения приводил).
спасибо большое! оказалось так просто)
источник

ФС

Федор Сигаев... in pgsql – PostgreSQL
blkmrkt
Благодарю, похоже нашел его: https://commitfest.postgresql.org/4/145/
Ага, оно
источник

YS

Yaroslav Schekin in pgsql – PostgreSQL
sexst
Я что-то вопрос не очень понял.
Если что, то я про pgsql_tmp. Можно, конечно, просто выкрутить work_mem настолько, что туда ничего/почти ничего писаться не будет, но тогда мы будем на каждый коннект память выделять, независимо от того нужна она или нет. Сунуть pgsql_tmp на приемлемый по размеру рамдиск (можно ещё и со сжатием) выльется в "чуть медленнее", зато предсказуемо по потреблению памяти, и ,в большинстве случаев, такой подход может немало оперативки сэкономить.
Хотя, как я сказал, холиварно, ситуации бывают разные. Кому-то случается и под 40-50G в этой директории заиметь.
> Если что, то я про pgsql_tmp.

Я тоже. Я имел в виду — ограничить с помощью temp_file_limit, да и всё.

> но тогда мы будем на каждый коннект память выделять, независимо от того нужна она или нет.

Ничего подобного. Work_mem — просто рекомендательное "ограничение", причём на один узел запроса.
Т.е. если запросам в данной сессии столько памяти не нужно — она и не выделяется вообще.
А если требуется больше, т.е. другого выхода нет (я тут как-то приводил примеры) — PostgreSQL попробует выделить сколько нужно, проигнорировав work_mem, кстати.

> Сунуть pgsql_tmp на приемлемый по размеру рамдиск

Мой совет выше — просто чтобы с ram disk не заморачиваться. Хотя таким образом можно ограничить "в общем", минус в непредсказуемых ошибках в запросах в сессиях, когда эта память будет почти исчерпана (т.е. сессии начнут "красть" друг у друга ресурсы). ;)

> такой подход может немало оперативки сэкономить.

Каким образом (по сравнению с тем, чтобы просто ограничить)?
источник

YS

Yaroslav Schekin in pgsql – PostgreSQL
ФСБ Беларуси
привет.
хочу поставить postgresql на ssd, но при этом хочу не убить быстро ресурс ssd. есть идеи? (СУБД будет обслуживать 10 мелких сайтиков, nextcloud и gitlab)
Из ресурсов хост-системы (proxmox)  - Intel DC S4500 480 GB в RAID 1  + Toshiba P300 2TB в RAID 1

я так понимаю, нужно выносить на HDD WAL / pg_stat_tmp / pg_stat?
А вообще, по этому вопросу: +1 вот к этому https://t.me/pgsql/230997
Т.е. эти "фокусы" — почти наверняка напрасная трата времени, да и всё.
источник
2020 June 10

П

Павел П. in pgsql – PostgreSQL
Спасибо вам большое за статью!
источник