Оптимизация MySQL Петр Зайцев Директор, Percona Ltd.
Немного о Докладчике Создание веб-сайтов Сопровождение интернет-проектов Консалтинговые услуги – исследования, разработка стратегии продвижения и позиционирования в Интернете. Percona Ltd – Консалтинг в области производительности MySQL LAMP MySQL Inc – Консалтинг, Поддержка, Работа с партнерами по вопросам производительности SpyLOG.RU – Один из основателей, Тех. Директор в далеком 1999
Немного о Докладе Основы оптимизация MySQL –Что можно успеть рассказать за минут Как найти проблему ? Настройки MySQL Оптимизация схемы и запросов
Немного о Главном – Приглашаем работать с нами. Вам интересны вопросы производительности ? Вы отлично знаете MySQL и Unix/Linux ? PHP, Perl, Ruby или Java Владеете английским языком Самостоятельны в решении задач Свяжитесь с нами –
Поиск источника проблем А в MySQL ли дело ? –Инструментация приложений для определения составляющих времени запроса. –Возможность включения ее в боевой инсталляции В чем именно проблема –Пропускная способность (throughput) –Время отклика
Поиск проблемных запросов Лог файл медленных запросв –--log-slow-queries –long-query-time=1 Долгие запросы –--log-queries-not-using-indexes - Запросы не использующие индексы –Проблема может быть не в самых медленных запросах Патч позволяющий логгинг запросов с временем с точностью до миллисекунды
Анализ лога запросов Много инструментов – mysqldumpslow, mysqlsla, mysql_parse_slow etc Анализ долгих запросов –Надо знать их источник Анализ запросов дающих наибольшую нагрузку (аггрегайия) Анализ запросов обрабатывающих много строк
Настройка MySQL Не используйте MySQL с настройками по умолчанию –Если используете его более чем для хранения домашней DVD библиотеки Наиболее важно настроить потребление памяти Для большинства приложений нужно изменить несколько параметров –Не пытайтесь тюнить все
Важные параметры key_buffer_size – кэш индексов MyISAM –Используется для временных таблиц даже если все Innodb –Смотрите сколько misses/sec max_connections - сколько соединений разрешено параллельно table_cache – число открытых таблиц –См рост opened_tables sort_buffer_size –Буффер сортировки – на каждый поток
Еще немного важных параметров query_cache_size –Кэширование результатов запросов (если не используется умное кэширование в приложении innodb_buffer_pool_size –Кэшируются и данные и индексы innodb_log_file_size –Большой лог быстрее запись innodb_flush_log_at_trx_commit=2 –Не скидывать лог на диск при commit
Схема и запросы идут вместе Разрабатывая схему думайте о том как она будет использоваться –А не только об объектах и связях между ними Планируйте в терминах операций а не запросов –Часто есть много путей получения одного и того же результата
Базовая оптимизация схемы Использование подходящих типов данных –Возраст это tinyint а не varchar Правильная индексация –Убедитесь что индекс действиельно используется как вы думаете Нормализация или Де-нормализация Дополнительные агрегированные таблицы
Еще надо учесть JOIN – дорогая штука –Особенно когда требуется ввод/вывод –MySQL умеет использовать nested-loops Планируется ли что база данных будет в основном влезать в память ? –Производительность может резко упасть когда активная часть базы данных перестает влезать в память Фрагментация данных –OPTIMIZE TABLE
Оптимизация запросов EXPLAIN SELECT... –Научитесь читать и понимать –DELETE/UPDATE можно заменить на SELECT –Число строк а плане примерное SHOW LOCAL STATUS –Как именно запрос выполнялся на низком уровне –Handler_XXXX параметры
Любимые команды mysqladmin extended -i100 -r SHOW PROCESSLIST SHOW VARIABLES SHOW INNODB STATUS vmstat 10 iostat -x 10 mpstat 10
Время для Вопросов