21 февр. 2011 г.

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

Пролог.
Случилось намедни так, что под нагрузкой начал загибаться один из самописных проектов и один из сторонних проектов на PHP+MySQL. В самописном проекте, так же как и в стороннем - узким местом стола БД MySQL(исходя из показателей top).
Как говориться - RTFM - в настройках MySQL можно указать логирование медленных запросов и запросов, которые не используют индексы.  Сия затея выполняется нехитрым способом:
добавляем в секцию [mysqld] файла my.conf( по дефолту в /etc ) строчки

slow_query_log_file = /path/to/slow_query.log
log_queries_not_using_indexes = true
slow_query_log = true
long_query_time = 3

В зависимости от мощности тестового сервера можно изменять long_query_time.
После перезагрузки сервера MySQL (/etc/init.d/mysql reload) и нагрузки на проект(важно отключить внутреннее кэширование запросов/данных) можно мониторить неугодные запросы и оптимизировать оные и/ или оптимизировать индексы таблиц.

Для оптимизации обработки логов интернет подсказал утилитку maatkit, и при помощи mk-query-digits можно привести лог к удобочитаемому виду для анализа

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