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

1,671 views

Published on

Published in: Technology
0 Comments
2 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
1,671
On SlideShare
0
From Embeds
0
Number of Embeds
494
Actions
Shares
0
Downloads
30
Comments
0
Likes
2
Embeds 0
No embeds

No notes for slide

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

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

×