Записки сисадмина

Или помойное ведро идей


Выделенные сервера от $130
VDS/VPS от $20

Уменьшение потребления памяти MySQL

В основном это касается Virtual Dedicated Server (VDS/VPS), т.к. дефолтная установка MySQL на CeontOS/Fedora/RHEL с дефолтным my.cnf делает malloc на сотню с лишним мегабайт.

Конечно на потребляемую память MySQL влияют такие параметры как key_buffer, query_cache_size и т.п. Но они по дефолту идут минимальные, а кеш запросов вообще по моему отключен по дефолту.

Так вот все очень просто. Добавляем в my.cnf:

skip-innodb
skip-bdb

Это выключит хандлеры InnoDB и BerkeleyDB и всю потребляемую ими память. Ну конечно делать это нужно если вы не используете вышеприведенные типы таблиц.

Далее рестартуем мускуль и видим в топе что он занимает десяток-другой мегабайт.

PS: в большинстве случаев не помешает опция и skip-networking. А вот thread_cache_size я советую поставить в значение 5-15 (в зависимости от нагрузки) :)

27.03.2009 Автор admin | FixIT, HOWTO, Базы Данных, Виртуализация, Очумелые ручки, Тюнинг | 9 comments

Комментарии (9) »

  1. дружище спасибо за статью! у меня mysqld жрал 27% процессора теперь только 1,5%!

    случаем не подскажешь насчет свопа на VDS, у меня он нулевой, может имеет смысл увеличить его?

    вот мой топ)

    top – 10:29:14 up 4 min, 1 user, load average: 0.37, 0.50, 0.23
    Tasks: 82 total, 1 running, 80 sleeping, 0 stopped, 1 zombie
    Cpu(s): 0.5% us, 0.5% sy, 0.0% ni, 93.2% id, 5.8% wa, 0.0% hi, 0.0% si
    Mem: 512000k total, 226920k used, 285080k free, 0k buffers
    Swap: 0k total, 0k used, 0k free, 0k cached

    PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
    16306 mysql 15 0 25260 6424 2964 S 0.7 1.3 0:11.76 mysqld

    Комментарий от denchik | 9 июня 2009

  2. Насколько мне известно, своп в виртуальной машине можно только увеличить на хост-машинах с ПО аппаратной виртуализации или паравиртуализации, т.е. VmWare,Xen.

    На Virtuozzo/OpenVZ такого сделать нельзя. Если у вас хост-машина работает на Xen/VmWare, вам своп безусловно не помешает.

    Комментарий от admin | 9 июня 2009

  3. работает на OpenVZ.
    с свопом ясно.
    а вот уменьшение стека помогает? уменьшил с 8 мб до 1 мб
    ( ulimit -s 1024 )

    Комментарий от denchik | 9 июня 2009

  4. а еще вопрос, что можно сделать при нехватке памяти? чтоб VDS не вис намертво, а прибивал жрущие процессы. Еще бы отловить как нибудь процесс который забивает память..

    Из идей только прога на дельфях которая будет висеть в трее и каждую минуту чекать домены, и если что дергать ремоут ребут.

    Комментарий от denchik | 9 июня 2009

  5. хз. Но отличие OpenVZ от Xen/VmWare заключается в том, что лимит на память распространяется чисто на приложения (privvmpages). В аппаратной и паравиртуализации при том же лимите памяти, приложениям памяти достанется значительно меньше, т.к. добрую ее часть займет ядро и буфера. Но взамен вы можете создать свой своп на диске.

    На OpenVZ 512 метров это нормальное значение. У меня виртуалки такие держат хороший трафик.

    Комментарий от admin | 10 июня 2009

  6. >> а еще вопрос, что можно сделать при нехватке памяти?

    Надо смотреть
    # cat /proc/user_bean_counters

    (точно не помню, как то так)

    Там показываются все лимиты и где было превышение. Скорей всего у вас oomguarpages зашкаливает. По справедливости, оно должно быть равно privvmpages.

    Комментарий от admin | 10 июня 2009

  7. пасиб, а скольо вдс с 512 памяти реально держит трафа? ну с пхп+mysql, по жескому:)

    Комментарий от denchik | 12 июня 2009

  8. nginx+apache+mysql при правильном тюнинге держит 20-50к “картиночного” трафика

    Комментарий от admin | 12 июня 2009

  9. О, спасибо, как раз в тему инфа. Спас от скоропалительного запуска недоделаногго сервака :)
    Пусть сайты поживут пока на старом вдс. Перенесу как все отлажу.

    Комментарий от Nab | 25 октября 2009

Оставить комментарий