Оптимізація MySQL

Зіткнувся з ситуацією, коли на Debian Linux сервері MySQL разом із Apache2 завантажує процесор на 95-100%! Щось варто змінювати, адже доходить до повного зависання сервера. Перше, що спало на думку, доставити оперативної пам’яті та замінити процесор. Це лише частково вирішило проблему, у пікові моменти нічого не змінилося! Необхідно оптимізувати MySQL, адже на оптимізована під запити баз даних налаштування MySQL спричиняє активні звернення до жорсткого диску на читання, що збільшує середнє навантаження на процесор (оскільки останній буде постійно очікувати даних від жорсткого диску).

Найперше, я завантажив скрипт для перевірки параметрів MySQL

wget http://github.com/rackerhacker/MySQLTuner-perl/zipball/v1.1.1
perl mysqltuner.pl

Після перевірки, отримав рекомендації по налаштуванню, зауваження, що багато таблиць не оптимізовані та, що MySQL не має доступу до всієї оперативної пам’яті (тут вже потрібно 64 бітну платформу 🙁 )

Додав у файл /etc/mysql/my.cfg параметри:

max_connections = 250
wait_timeout = 28000
interactive_timeout = 28000
max_heap_table_size = 16M
table_cache = 64
tmp_table_size = 32M
thread_cache_size       = 16
query_cache_type        = 1
query_cache_size = 64M
innodb_buffer_pool_size = 1G

Для оптимізації усіх таблиць в базі, зупинив веб-сервер (для забезпечення належної швидкодії), та виконав наступні команди:

invoke-rc.d apache2 stop
mysqlcheck -u root -p --auto-repair --check --optimize --all-databases

Вирішив встановити нове ядро з підтримкою 4Гб+ оперативки:

aptitude update && aptitude full-upgrade
aptitude install linux-image-2.6-686-bigmem

Перезавантаження системи… Вже краще – навантаження на процесор знизилось, запити опрацьовуються набагато швидше! Проте, так і не бачить усієї оперативної пам’яті 🙁 Потрібно переходити на 64бітку…

Leave a Reply

Your email address will not be published. Required fields are marked *