|
Ограничить потребление памяти активными соединениями в PostgreSQL - work_mem не помогает
|
|||
---|---|---|---|
#18+
Имеется проблема с PostgreSQL 12 в Ubuntu 20.04 с тем, что он со временем (через 1-3 суток после перезапуска) начинает занимать слишком много памяти (10+ Gb of RAM). На сервере 16Gb, но они нужны для других процессов, так что нужно ограничить потребление RAM PostgreSQL-сервисом до 5-6 Gb максимум. Причём память занимают именно процессы, обслуживающие активные соединения программ с базой данных, т.к. если перезапустить программу, она обрывает соединения и потребление памяти сервисом PostgreSQL сразу же снижается до 2 Gb. Принудительно обрубать активные соединения - как-то вариант не очень, транзакции могут пострадать. Как я понимаю, за потребление памяти, расходуемой на конкретные соединения (исключая общие кеши и буферы на все соединения) отвечают только следующие параметры: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10.
Я уже перепробовал различные варианты зарезания лимитов памяти, на текущий момент установлены следующие параметры: Код: plaintext 1. 2. 3.
Подскажите пожалуйста, каким образом можно ещё зарезать лимиты расходования памяти, чтобы PostgreSQL не расходовал более 6Gb? Или хотя бы предложите способ, которым можно увидеть текущую расходуемую память с группировкой по всем активным соединениям (именно их индивидуальную память, без shared)? Через top, pg_top - выводятся только общие цифры (VIRT, RES, SHR) по каждому процессу, которые если сложить - то получается 60+ Gb и толку от этой цифры никакой. И каким образом можно посмотреть, на что именно в текущий момент расходуется память отдельного процесса postgresql, обслуживающего одно конкретное соединение? ... |
|||
:
Нравится:
Не нравится:
|
|||
25.01.2021, 09:39 |
|
Ограничить потребление памяти активными соединениями в PostgreSQL - work_mem не помогает
|
|||
---|---|---|---|
#18+
max_connections сколько? ... |
|||
:
Нравится:
Не нравится:
|
|||
25.01.2021, 10:00 |
|
Ограничить потребление памяти активными соединениями в PostgreSQL - work_mem не помогает
|
|||
---|---|---|---|
#18+
Guzya max_connections сколько? 20 штук, снижать ниже нельзя, т.к. другие приложения периодически подключаются (и быстро отключаются, так что память освобождается). ... |
|||
:
Нравится:
Не нравится:
|
|||
25.01.2021, 11:50 |
|
Ограничить потребление памяти активными соединениями в PostgreSQL - work_mem не помогает
|
|||
---|---|---|---|
#18+
Программа на том же сервере? ... |
|||
:
Нравится:
Не нравится:
|
|||
25.01.2021, 12:12 |
|
Ограничить потребление памяти активными соединениями в PostgreSQL - work_mem не помогает
|
|||
---|---|---|---|
#18+
MurzNN Подскажите пожалуйста, каким образом можно ещё зарезать лимиты расходования памяти, чтобы PostgreSQL не расходовал более 6Gb? Таких настроек нет. MurzNN И каким образом можно посмотреть, на что именно в текущий момент расходуется память отдельного процесса postgresql, обслуживающего одно конкретное соединение? GDB + call MemoryContextStats(TopMemoryContext) pg_backend_memory_contexts в pg14 Поскольку расходуете память backend (и довольно быстро) - могу сходу дать два предположения: - злоупотребляете DO или CALL при слишком старой версии базы (обновляйтесь на актуальный минор) - активно используете именованные prepare, но не делаете deallocate - хранимки на интересных PL/что-то ... |
|||
:
Нравится:
Не нравится:
|
|||
25.01.2021, 12:24 |
|
Ограничить потребление памяти активными соединениями в PostgreSQL - work_mem не помогает
|
|||
---|---|---|---|
#18+
Guzya Программа на том же сервере? Да, на том же сервере, держит постоянно от 2 до 6 соединений активных (пул соединений), и как раз эти долгие соединения являются причиной большого расхода памяти, т.к. если их оборвать - память сразу освобождается. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.01.2021, 13:34 |
|
Ограничить потребление памяти активными соединениями в PostgreSQL - work_mem не помогает
|
|||
---|---|---|---|
#18+
Melkij MurzNN И каким образом можно посмотреть, на что именно в текущий момент расходуется память отдельного процесса postgresql, обслуживающего одно конкретное соединение? Поскольку расходуете память backend (и довольно быстро) - могу сходу дать два предположения: - злоупотребляете DO или CALL при слишком старой версии базы (обновляйтесь на актуальный минор) - активно используете именованные prepare, но не делаете deallocate - хранимки на интересных PL/что-то У меня, так сказать, "мопед не мой" - приложение стороннее ( Matrix Synapse server ), так что поменять запросы я не могу в нём ;( Melkij GDB + call MemoryContextStats(TopMemoryContext) pg_backend_memory_contexts в pg14 14 версия пока недоступна в репах, самому компилить довольно тяжко. Попробую с GDB разобраться, благодарю за наводку! ... |
|||
:
Нравится:
Не нравится:
|
|||
25.01.2021, 13:41 |
|
|
start [/forum/topic.php?fid=53&fpage=17&tid=1994243]: |
0ms |
get settings: |
9ms |
get forum list: |
12ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
38ms |
get topic data: |
11ms |
get forum data: |
2ms |
get page messages: |
43ms |
get tp. blocked users: |
2ms |
others: | 15ms |
total: | 138ms |
0 / 0 |