Зіткнувся з ситуацією, коли на 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бітку…