Postgres почему растет использование swap? Как его уменьшить? - АУС РДС

наличие БД postgres на AWS-RDS Swap Usage в постоянно растет.

почему он поднимается? Я попытался перезагрузить, но он не тонет. AWS пишет, что высокое использование свопа - это"индикативные вопросы производительности"

Я пишу данные в эту БД. CPU и память выглядят здоровыми: enter image description here

если быть точным у меня
db.t2.micro - экземпляр и на данный момент ~30/100 ГБ данных в 5 таблицах-SSD общего назначения. По умолчанию в PostgreSQL.conf.

своп-график выглядит следующим образом:

enter image description here

Swap предупреждение об использовании:

enter image description here

3 ответов


Ну, кажется, что ваши запросы используют объем памяти над вашим доступным. Поэтому вы должны посмотреть на свой план выполнения запросов и узнать наибольшие нагрузки. Эти запросы превышают объем памяти, доступный для postgresql. Обычно чрезмерное присоединение (т. е. плохая структура базы данных, которая была бы лучше денонармализована, если применимо), или много вложенных запросов, или запросы с предложениями IN - это типичные подозреваемые. Я думаю, amazon поставила как можно больше для postgresql.conf и те значения по умолчанию довольно хороши для этой крошечной машины.

но еще раз, если ваш размер свопа не превышает вашу доступную память и вы находитесь на SSD - не было бы так много вреда от него


очевидно, у вас закончилась память. децибел.Т2.micro имеет только 1 ГБ оперативной памяти. Вы должны посмотреть в выводе htop, чтобы увидеть, какие процессы занимают большую часть памяти и попытаться оптимизировать использование памяти. Также есть хорошая утилита под названием pgtop (http://ptop.projects.pgfoundry.org/), который показывает текущие запросы, количество прочитанных строк и т. д. Вы можете использовать его для просмотра состояния postgress в режиме реального времени. Кстати, если вы не можете установить pgtop, вы можете получить ту же информацию из внутренних инструментов posgres - проверьте документацию коллектора статистики postgreshttps://www.postgresql.org/docs/9.6/static/monitoring-stats.html

на самом деле трудно сказать, в чем проблема, но db.Т2.micro-очень ограниченный экземпляр. Вы должны рассмотреть вопрос о принятии biggier экземпляр, особенно если вы используете базы данных Postgres в производстве.


Регистрация

select * from pg_stat_activity;

и посмотрите, какой процесс занимает много времени и сколько процессов спит, попробуйте изменить свой RDS DBparameter в соответствии с вашими потребностями.