Я хочу создать bash-скрипт, который предупредит меня о том, что размер моей базы данных становится слишком большим, чтобы уместиться в память. Эффективный скрипт bash будет запускаться ежедневно и сообщать мне по электронной почте только при db_size / memory >= 0.5
.
Например: You should to size up your Digital Ocean Droplet soon for your PostgreSQL server: db_size = 0.6 GB; system_memory = 1.0 GB;
Проблема в том, что я не уверен, как именно сделать это сравнение. Сначала я использовал команду psql pg_size_pretty
и команду Linux free.
. Можно ли провести хорошее / точное сравнение между db_size и общим объемом памяти (или другим полем), чтобы предупредить меня, когда мне нужно изменить размер? моя капелька? Или уже есть какие-либо инструменты, которые делают подобные вещи?
Bash Script
#!/usr/bin/env bash
db_size=`psql dbname username -c "SELECT pg_size_pretty( pg_database_size('dbname') );"`
echo $db_size
free
выход
user@postgres-server:~/gitrepo/scripts/cronjobs# bash postgres_db_size_check.sh
pg_size_pretty ---------------- 6976 kB (1 row)
total used free shared buff/cache available
Mem: 1016000 48648 142404 54492 824948 699852
Swap: 0 0 0
Какое правильное сравнение следует использовать в приведенных выше выходных данных? В выходных данных выше размер базы данных PostgreSQL составляет всего 6,976 МБ, а доступная память сервера - 1 016,00 МБ. Так что сейчас у нас 0,6% используемой оперативной памяти (6,976 / 1,016,00) с <20 пользователями. Когда я масштабирую свою базу данных, я ожидаю, что размер базы данных быстро увеличится, и я хочу опередить ее до того, как возникнет проблема с ОЗУ. </p>
После некоторого изучения Настройка PostgreSQL Я понял, что дать PostgreSQL больше памяти для использования не так просто, как просто увеличить объем оперативной памяти. Скорее всего, необходимо установить несколько переменных, чтобы использовать дополнительную память, включая work_mem ,ffective_cache_size и shared_buffers. Я говорю это, чтобы заметить, что я понимаю, что увеличение объема оперативной памяти моего сервера - это только один шаг в этом процессе.
Я задал этот вопрос об администраторах баз данных, но никто не получил от меня ответ.