оптимизация My Sql петр зайцев

16
Оптимизация MySQL Оптимизация MySQL Петр Зайцев Петр Зайцев Директор, Percona Ltd. Директор, Percona Ltd. [email protected] http://www.mysqlperformanceblog.com http://www.mysqlperformanceblog.com

description

 

Transcript of оптимизация My Sql петр зайцев

Page 1: оптимизация My Sql   петр зайцев

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

Петр ЗайцевПетр ЗайцевДиректор, Percona Ltd.Директор, Percona [email protected]://www.mysqlperformanceblog.comhttp://www.mysqlperformanceblog.com

Page 2: оптимизация My Sql   петр зайцев

www.rit2007.ru

Немного о Докладчике Немного о Докладчике

Создание веб-сайтов•Сопровождение интернет-проектов

Консалтинговые услуги – исследования, разработка стратегии продвижения и позиционирования в Интернете.

• Percona Ltd – Консалтинг в области производительности MySQL LAMP

• http://www.mysqlperformanceblog.com• MySQL Inc – Консалтинг, Поддержка,

Работа с партнерами по вопросам производительности

• SpyLOG.RU – Один из основателей, Тех. Директор в далеком 1999

Page 3: оптимизация My Sql   петр зайцев

www.rit2007.ru

Немного о ДокладеНемного о Докладе

• Основы оптимизация MySQL– Что можно успеть рассказать за 20 15 минут

• Как найти проблему ?• Настройки MySQL• Оптимизация схемы и запросов

Page 4: оптимизация My Sql   петр зайцев

www.rit2007.ru

Немного о Главном – Приглашаем Немного о Главном – Приглашаем работать с нами.работать с нами.

• Вам интересны вопросы производительности ?

• Вы отлично знаете MySQL и Unix/Linux ?• PHP, Perl, Ruby или Java • Владеете английским языком • Самостоятельны в решении задач• Свяжитесь с нами

[email protected]

Page 5: оптимизация My Sql   петр зайцев

www.rit2007.ru

Поиск источника проблемПоиск источника проблем

• А в MySQL ли дело ?– Инструментация приложений для

определения составляющих времени запроса.

– Возможность включения ее в боевой инсталляции

• В чем именно проблема– Пропускная способность (throughput)– Время отклика

Page 6: оптимизация My Sql   петр зайцев

www.rit2007.ru

Поиск проблемных запросовПоиск проблемных запросов

• Лог файл медленных запросв– --log-slow-queries –long-query-time=1

• Долгие запросы

– --log-queries-not-using-indexes - • Запросы не использующие индексы

– Проблема может быть не в самых медленных запросах

• Патч позволяющий логгинг запросов с временем с точностью до миллисекунды

• http://www.mysqlperformanceblog.com

Page 7: оптимизация My Sql   петр зайцев

www.rit2007.ru

Анализ лога запросовАнализ лога запросов

• Много инструментов – mysqldumpslow, mysqlsla, mysql_parse_slow etc

• Анализ долгих запросов – Надо знать их источник

• Анализ запросов дающих наибольшую нагрузку (аггрегайия)

• Анализ запросов обрабатывающих много строк

Page 8: оптимизация My Sql   петр зайцев

www.rit2007.ru

Настройка MySQLНастройка MySQL

• Не используйте MySQL с настройками по умолчанию– Если используете его более чем для

хранения домашней DVD библиотеки

• Наиболее важно настроить потребление памяти

• Для большинства приложений нужно изменить несколько параметров– Не пытайтесь тюнить все

Page 9: оптимизация My Sql   петр зайцев

www.rit2007.ru

Важные параметрыВажные параметры

• key_buffer_size – кэш индексов MyISAM– Используется для временных таблиц даже

если все Innodb– Смотрите сколько misses/sec

• max_connections - сколько соединений разрешено параллельно

• table_cache – число открытых таблиц– См рост opened_tables

• sort_buffer_size– Буффер сортировки – на каждый поток

Page 10: оптимизация My Sql   петр зайцев

www.rit2007.ru

Еще немного важных параметровЕще немного важных параметров

• query_cache_size– Кэширование результатов запросов (если не

используется умное кэширование в приложении

• innodb_buffer_pool_size– Кэшируются и данные и индексы

• innodb_log_file_size– Большой лог быстрее запись

• innodb_flush_log_at_trx_commit=2– Не скидывать лог на диск при commit

Page 11: оптимизация My Sql   петр зайцев

www.rit2007.ru

Схема и запросы идут вместеСхема и запросы идут вместе

• Разрабатывая схему думайте о том как она будет использоваться– А не только об объектах и связях между

ними

• Планируйте в терминах операций а не запросов– Часто есть много путей получения одного и

того же результата

Page 12: оптимизация My Sql   петр зайцев

www.rit2007.ru

Базовая оптимизация схемыБазовая оптимизация схемы

• Использование подходящих типов данных– Возраст это tinyint а не varchar

• Правильная индексация– Убедитесь что индекс действиельно

используется как вы думаете

• Нормализация или Де-нормализация• Дополнительные агрегированные

таблицы

Page 13: оптимизация My Sql   петр зайцев

www.rit2007.ru

Еще надо учестьЕще надо учесть

• JOIN – дорогая штука– Особенно когда требуется ввод/вывод– MySQL умеет использовать nested-loops

• Планируется ли что база данных будет в основном влезать в память ?– Производительность может резко упасть

когда активная часть базы данных перестает влезать в память

• Фрагментация данных– OPTIMIZE TABLE

Page 14: оптимизация My Sql   петр зайцев

www.rit2007.ru

Оптимизация запросовОптимизация запросов

• EXPLAIN SELECT ...– Научитесь читать и понимать– DELETE/UPDATE можно заменить на

SELECT– Число строк а плане примерное

• SHOW LOCAL STATUS– Как именно запрос выполнялся на низком

уровне– Handler_XXXX параметры

Page 15: оптимизация My Sql   петр зайцев

www.rit2007.ru

Любимые командыЛюбимые команды

• mysqladmin extended -i100 -r• SHOW PROCESSLIST• SHOW VARIABLES• SHOW INNODB STATUS• vmstat 10• iostat -x 10 • mpstat 10

Page 16: оптимизация My Sql   петр зайцев

www.rit2007.ru

Время для ВопросовВремя для Вопросов[email protected]@mysqlperformanceblog.com