Оптимизация сервера MySql — утилита mysqltuner
Так повелось, что в мире хостинга , самой популярной базой данных, де факто стала база mysql. Простота установки , бесплатность, а главное, высокая скорость работы, сделали ее одной из наиболее часто используемых баз данных в мире хостинга. Она может многое, работает быстро, но, без должной изначальной настройки может стать очень узким местом. А отсюда может тянуться и медленная загрузка страниц сайта, и ошибки на страницах вида "Too many active connections".
После установки mysql на выделенный сервер, изначально его файл конфигурации размещается в /etc/my.cnf и выглядит весьма скромно. В такой конфигурации работать то он будет, но про какую-либо оптимальную работу говорить не приходиться. Вот и попробуем немного улучшить наши настройки сервера mysql, для его более оптимальной работы. Первым делом нам необходимо взять более менее нормальный конфигурационный файл my.cnf, более подходящий для нашего сервера. А найти его можно в /usr/share/mysql. Там есть четыре необходимых нам файлика: my-small.cnf, my-medium.cnf, my-large.cnf и my-huge.cnf. Выбираем под наш сервер, нашу память, наши запросы наиболее подходящий файл. my-small.cnf — конфигурация для систем с обьемом памяти менее 64Mb, где mysql используется время от времени. Это не для нас. medium.cnf — чуть лучше, под mysql может выделяться до 64Мb памяти. В общем то это тоже обычно не для нас, разве что очень маломощные VDS, VPS. my-large.cnf — уже посерьезнее, для систем с оперативной памятью от 512Мb. my-huge.cnf — для систем с оперативной памятью 1-2Gb. Выбираем одну из наиболее подходящих нам конфигураций и переписываем ее вместо текущей my.cnf . Например:
cp /usr/share/mysql/my-large.cnf /etc/my.cnf
После чего делаем рестарт сервера.
service mysqld restart
В общем случае эффект даже от такого, казалось бы простого шага сразу должен почувствоваться. Дальнейшая оптимизация производительности сервера mysql может проводиться с помощью использования специальных утилит.
Одной из таких утилит, которая может помочь в выявлении проблемных мест конфигурации сервера mysql, является утилита mysqltuner. Утилита представляет собой скрипт написанный на языке perl. Инсталляции не требует. Его просто нужно скачать
wget http://mysqltuner.pl/
и запустить
perl mysqltuner.pl
Скрипт попросит имя и пароль MySQL администратора, после чего выведет результаты своей работы. Вывод результатов работы утилиты примерно такой:
[root@host 1]# perl mysqltuner.pl >> MySQLTuner 1.0.1 — Major Hayden <major@mhtx.net> >> Bug reports, feature requests, and downloads at http://mysqltuner.com/ >> Run with '—help' for additional options and output filtering Please enter your MySQL administrative login: root Please enter your MySQL administrative password: ——— General Statistics ————————————————— [—] Skipped version check for MySQLTuner script [OK] Currently running supported MySQL version 5.0.82sp1-log [!!] Switch to 64-bit OS — MySQL cannot currently use all of your RAM ——— Storage Engine Statistics ——————————————- [—] Status: -Archive +BDB -Federated +InnoDB -ISAM -NDBCluster [—] Data in MyISAM tables: 19M (Tables: 90) [!!] InnoDB is enabled but isn't being used [!!] BDB is enabled but isn't being used [!!] Total fragmented tables: 18 ——— Performance Metrics ————————————————- [—] Up for: 16m 37s (6K q [6.059 qps], 146 conn, TX: 54M, RX: 665K) [—] Reads / Writes: 62% / 38% [—] Total buffers: 298.0M global + 6.3M per thread (100 max threads) [OK] Maximum possible memory usage: 929.2M (26% of installed RAM) [OK] Slow queries: 0% (0/6K) [OK] Highest usage of available connections: 5% (5/100) [OK] Key buffer size / total MyISAM indexes: 256.0M/2.3M [!!] Key buffer hit rate: 91.3% (1K cached / 101 reads) [OK] Query cache efficiency: 97.6% (5K cached / 5K selects) [OK] Query cache prunes per day: 0 [OK] Sorts requiring temporary tables: 0% (0 temp sorts / 8 sorts) [OK] Temporary tables created on disk: 5% (1 on disk / 17 total) [OK] Thread cache hit rate: 96% (5 created / 146 connections) [OK] Table cache hit rate: 95% (115 open / 121 opened) [OK] Open file limit used: 21% (222/1K) [OK] Table locks acquired immediately: 100% (286 immediate / 286 locks) ——— Recommendations —————————————————— General recommendations: Add skip-innodb to MySQL configuration to disable InnoDB Add skip-bdb to MySQL configuration to disable BDB Run OPTIMIZE TABLE to defragment tables for better performance MySQL started within last 24 hours — recommendations may be inaccurate Enable the slow query log to troubleshoot bad queries
В первую очередь, на мой взгляд, стоит обратить внимание на строку
Highest usage of available connections: 5% (5/100)
Количество текущих соединений — 5, количество возможных соединений — 100. Параметр 100 — это параметр использующийся по умолчанию. Обычно этого значения маловато, именно из-за него появляются сообщения вида "Too many active connections". Увеличим этот параметр до 300. Открываем файл /etc/my.cnf в любимом редакторе и в секции [mysqld] добавляем строчку
max_connections = 300