Сокращение потребления памяти mysql на ubuntu @aws micro instance
Недавно я начал работу над проектом PoC, в котором мы разрабатываем небольшое веб-приложение. Первоначальная настройка выполняется на микро-экземпляре из AWS. Мы находимся в rails + mysql stack.
После установки/запуска MySQL я вижу, что уже потребляется около 500 МБ ОЗУ; оставив для системы меньше всего (микроуровне имеют только 620 МБ ОЗУ).
Наше приложение довольно просто на этом этапе. Могу ли я что-то сделать для уменьшения объема памяти, потребляемой сервером MySQL?
Оцените справку.
Ответы
Ответ 1
Измените этот параметр в файле конфигурации MySQL (my.cnf)
key_buffer = 8M
max_connections = 30 # Limit connections
query_cache_size = 8M # try 4m if not enough
query_cache_limit = 512K
thread_stack = 128K
Ответ 2
В файле my.cnf:
performance_schema = 0
И перезапустите mysql. Это должно резко сократить использование памяти, если вы ранее ее использовали.
2016 Edit: Из MySQL 5.7.8 и выше этого недостаточно для освобождения памяти данных схемы производительности:
Как и в случае с MySQL 5.7.8, даже когда схема производительности отключена, она продолжает заполнять таблицы global_variables, session_variables, global_status и session_status.
(источник)
Чтобы предотвратить это поведение, установите show_compatibility_56
в 1 в дополнение к performance_schema
. Иными словами, ваши изменения my.cnf должны выглядеть так:
performance_schema = 0
show_compatibility_56 = 1
Ответ 3
Просто добавьте к другому ответу. Недавно у меня была эта проблема с микро-экземпляром Amazon (а не Ubuntu). Файл my.cnf почти пуст, поэтому я сделал следующее:
cp /etc/my.cnf /etc/my.cnf.orig
cp /usr/share/mysql/my-medium.cnf /etc/my.cnf
Измените my.cnf и включите строки innodb, если это применимо. Перезапустите mysqld.
Также микро-экземпляр не имеет свопа, это может быть проблемой.
SWAPFILE=/mnt/swapfile.swap
dd if=/dev/zero of=$SWAPFILE bs=1M count=512
mkswap $SWAPFILE
swapon $SWAPFILE
Затем в /etc/rc.local добавьте:
swapon/mnt/swapfile.swap
Чтобы сохранить память в рубине, вы можете использовать рубиновое предприятие:
bash < <(curl -s https://raw.github.com/wayneeseguin/rvm/master/binscripts/rvm-installer)
gpasswd -a root rvm
source /etc/profile.d/rvm.sh
rvm get head
rvm reload
rvm install ree
rvm --default use ree
Ответ 4
У меня есть сервер с объемом памяти 500 Мбайт и обнаружил, что mysql начал использовать много баранов, так как мои таблицы стали больше. После игры с кучей настроек, что уменьшило использование памяти для меня, было преобразование всех моих таблиц в MyISAM.
Если вам не нужны функции конвертирования таблиц innodb в MyISAM, это очень помогает.
Вы можете конвертировать таблицы следующим образом:
ALTER TABLE test.mytable ENGINE=MyISAM;
После этого изменения я обнаружил, что использование памяти уменьшилось на 20%.
Чтобы получить дальнейшее сокращение использования памяти, вы можете конвертировать ВСЕ ваши таблицы в MyISAM, а затем полностью отключить поддержку innodb в mysql.
Это уменьшило использование памяти на 50%.
Вы можете сделать это, добавив:
[mysqld]
default_storage_engine=myisam
innodb=OFF
а затем перезапустите mysql.