пятница, 4 января 2013 г.

Производительность mysql

Первое, что рекомендуют при оптимизации любой БД в Unix системах, это включение опции noatime для раздела с данными БД.

При этом отключается запись информации о последнем обращении к файлам.
Эту опцию нужно прописать в файл /etc/fstab в качестве параметра монтирования ФС.

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

mount -o remount <точка монтирования раздела>

mount -o remount,noatime /


Далее выполним оптимизацию таблиц mysql, это делается следующей командой:

mysqloptimize --analyze --all-databases -u root -p

Примечание: только для таблиц типа myisam. Для innodb не пройдет.



Следующим шагом будет использование утилиты MySQLTuner. Она входит в основной репозиторий Debian, поэтому её установка весьма тривиальна:

apt-get install mysqltuner

sudo mysqltuner --forcemem 4960 --forceswap 1021

где forcemem - количество  озу, forceswap - swap

Официальная документация рекомендует работу сервера хотя бы сутки, под типичной для него нагрузкой, перед использованием утилиты. А т.к. для достижения максимального эффекта нам придётся многократно запускать эту утилиту, то вместо суточного ожидания мы будем использовать короткое стресс-тестирование (подробное описание нагрузочного тестирования дано ниже).

При запуске утилиты будут запрошены логин и пароль администратора mysql, после чего будет выдан краткий анализ работы MySQL и набор параметров, которые рекомендуют добавить в конфигурацию сервера (/etc/mysql/my.cnf). После изменения параметров необходим перезапуск mysql:

 service mysql restart

Наш алгоритм использования этой утилиты выглядит следующим образом:

Запускаем нагрузочное тестирования web-сервера (запоминаем результаты)
Запускаем mysqltuner.

Изменяем параметры mysql в соответствии с рекомендациями утилиты.
Перезапускаем mysql.
Возвращаемся к 1-му пункту. Цикл нужно повторять до тех пор пока не закончатся рекомендации mysqltuner (чуть подробее описано ниже).

Очень часто mysqltuner при каждой итерации рекомендует увеличение одного и того же параметра (каждый раз на большее значение), причём даже после нескольких изменений подряд улучшения работы сервера нет (смотрите результаты стресс-тестирования).

При этом нам известны два варианта: первый - параметр ещё не достиг значения при котором почувствуется эффект от его изменения (тут нужно просто набраться терпения и пройти ещё несколько итераций) и второй - эффект от данного параметра может и будет, но у нас просто не хватит на это ресурсов (т.е. если при очередной итерации Вам советуют выделить под какой-то параметр память сравнимую с общим объёмом в системе, а результата после этого всё равно нет, то нужно просто откатится на разумное значение этого параметра).


Комментариев нет:

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