Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

MySQL для высоконагруженных проектов

3,558 views

Published on

Published in: Technology
  • Sex in your area is here: ❤❤❤ http://bit.ly/36cXjBY ❤❤❤
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here
  • Dating direct: ❤❤❤ http://bit.ly/36cXjBY ❤❤❤
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here
  • Be the first to like this

MySQL для высоконагруженных проектов

  1. 1. Mysql для высоконагруженных систем Метелкин Михаил Геннадьевич, Ведущий Web- разработчик [email_address]
  2. 2. Архитектура Mysql
  3. 3. Архитектура Mysql
  4. 4. Mysql Engines ( характеристики ) <ul><li>MyISAM </li></ul><ul><li>Блокировка всей таблицы </li></ul><ul><li>Автоматическая проверка и востановление таблиц </li></ul><ul><li>Поддерживает FULL-text индексы </li></ul><ul><li>Отложенная запись данных индексов </li></ul><ul><li>Компрессия MyISAM таблиц </li></ul>
  5. 5. Mysql Engines ( характеристики ) <ul><li>InnoDB </li></ul><ul><li>Поддержка транзакций </li></ul><ul><li>Использование механизма MVCC </li></ul><ul><li>Поддержка внешних ключей </li></ul>
  6. 6. Mysql Engines ( характеристики ) <ul><li>Memory Engine ( HEAP ) </li></ul><ul><li>Хранение данных в памяти </li></ul><ul><li>Поддержка Hash индексов </li></ul><ul><li>Поддержка только строк фиксированной длины ( CHAR ) </li></ul>
  7. 7. Mysql Engines ( характеристики ) <ul><li>Archive Engine </li></ul><ul><li>Подержка только SELECT и INSERT запросов </li></ul><ul><li>Не поддерживает индексов </li></ul><ul><li>Поддержка блокировки на уровне строки </li></ul>
  8. 8. Нахождение &quot; узких мест “ производительности системы <ul><li>Определение производительности </li></ul><ul><ul><li>Транзакций в единицу времени </li></ul></ul><ul><ul><li>Время отклика </li></ul></ul><ul><ul><li>Расширяемость </li></ul></ul><ul><ul><li>Конкурентность </li></ul></ul><ul><li>Профилирование </li></ul><ul><ul><li>Полное время выполнения задачи </li></ul></ul><ul><ul><li>Время выполнения каждого запроса </li></ul></ul><ul><ul><li>Время открытия каждого соединения к mysql </li></ul></ul><ul><ul><li>Время вызова каждого внешнего ресурса (веб-сервисов и т.д.) </li></ul></ul><ul><ul><li>Вызов потенциально затратных функций </li></ul></ul><ul><ul><li>Системное время CPU </li></ul></ul>
  9. 9. Нахождение &quot; узких мест “ производительности системы <ul><li>“ Инструменты” для определения производительности </li></ul><ul><ul><li>а b ( http://httpd.apache.org/docs/2.0/programs/ab.html ) </li></ul></ul><ul><ul><li>http_load ( http://www.acme.com/software/http_load/ ) </li></ul></ul><ul><ul><li>JMeter ( http://jakarta.apache.org/jmeter/ ) </li></ul></ul><ul><ul><li>mysqlslap ( http://dev.mysql.com/doc/refman/5.1/en/mysqlslap.html ) </li></ul></ul><ul><ul><li>Sysbench ( http://sysbench.sourceforge.net/ ) </li></ul></ul><ul><ul><li>Database Test Suite ( http://sourceforge.net/projects/osdldbt/ ) </li></ul></ul><ul><ul><li>MySQL Benchmark Suite ( http://dev.mysql.com/doc/en/mysql-benchmarks.html/ ) </li></ul></ul><ul><ul><li>Super Smack ( http://vegan.net/tony/supersmack/ ) </li></ul></ul>
  10. 10. Нахождение &quot; узких мест “ производительности системы <ul><li>Профилирование </li></ul><ul><ul><li>Логирование запросов ( general log, slow log ) . </li></ul></ul><ul><ul><ul><li>Конфигурационные настройки : </li></ul></ul></ul><ul><ul><ul><li>log = <file_name> </li></ul></ul></ul><ul><li>log-slow-queries = <file_name> </li></ul><ul><li>long_query_time = 2 </li></ul><ul><li>log-queries-not-using-indexes </li></ul><ul><li>log-slow-admin-statements </li></ul><ul><li>Приложения : </li></ul><ul><li>mysqldumpslow </li></ul><ul><li>mysql_slow_log_filter ( http://www.mysqlperformanceblog.com/files/utils/mysql_slow_log_filter ) </li></ul>
  11. 11. Нахождение &quot; узких мест “ производительности системы <ul><li>“ Инструменты ” для задач профилирования </li></ul><ul><li>mysql_slow_log_parser </li></ul><ul><li>( http://www.mysqlperformanceblog.com/files/utils/mysql_slow_log_parser ) mysqlsla ( http://hackmysql.com/mysqlsla ) </li></ul><ul><ul><ul><li>SHOW STATUS </li></ul></ul></ul><ul><li>mysql> FLUSH STATUS; </li></ul><ul><li>mysql> SHOW SESSION STATUS LIKE 'Select%'; </li></ul>
  12. 12. Нахождение &quot; узких мест “ производительности системы <ul><li>“ Инструменты ” для задач профилирования </li></ul><ul><ul><li>SHOW PROFILE </li></ul></ul><ul><ul><ul><li>mysql> SET profiling = 1; </li></ul></ul></ul>
  13. 13. Оптимизация схемы и расстановка индексов <ul><ul><li>Выбор оптимальных типов данных </li></ul></ul><ul><ul><ul><li>Наименьший из приемлимых типов данных </li></ul></ul></ul><ul><ul><ul><li>Наиболее простой из возможных </li></ul></ul></ul><ul><ul><ul><li>Избегайте Null по умолчанию </li></ul></ul></ul><ul><ul><li>Расстановка индексов </li></ul></ul><ul><ul><ul><li>Изоляция колонок в запросах </li></ul></ul></ul><ul><ul><ul><li>Наименьшая возможная длина индексов </li></ul></ul></ul><ul><ul><ul><li>Только необходимые индексы </li></ul></ul></ul>
  14. 14. Оптимизация запросов <ul><ul><li>Выбирайте только необходимое количество строк </li></ul></ul><ul><ul><li>Всегда прописывайте те поля которые необходимы дл выборки </li></ul></ul><ul><ul><li>Особенно в запросах использующих JOIN </li></ul></ul><ul><ul><li>Правило “ идеального запроса ” - количество проверенных сервером строк ≈ количеству возвращенных строк </li></ul></ul><ul><ul><li>Полное сканирование таблиц – высшее зло! </li></ul></ul><ul><ul><li>Разбивайте очень сложные запросы на несколько составных </li></ul></ul><ul><ul><li>Производите операции с большими объемами данных частями </li></ul></ul>
  15. 15. Оптимизация запросов <ul><ul><li>Декомпозиция JOIN’ ов </li></ul></ul><ul><ul><li>Хранение результатов больших выборок в приложении </li></ul></ul><ul><ul><li>Проверка использования индексов при запросе </li></ul></ul><ul><ul><li>Использование Explain </li></ul></ul>
  16. 16. Репликация <ul><ul><li>Репликация – синхронное / асинхронное копирование данных с ведущих серверов на ведомые . </li></ul></ul><ul><ul><li>Решаемые задачи : </li></ul></ul><ul><ul><li>Распределение данных (географически). </li></ul></ul><ul><ul><li>Распределение нагрузки ( Load balancing ). </li></ul></ul><ul><ul><li>Backups </li></ul></ul><ul><ul><li>Отказоустойчивость </li></ul></ul><ul><ul><li>Тестирование апдейтов и новых версий Mysql. </li></ul></ul>
  17. 17. Партицирование <ul><ul><li>Партицирование – разбиение данных таблиц на логические части по выбранным критериям </li></ul></ul><ul><ul><li>Методы : </li></ul></ul><ul><ul><li>RANGE (По диапазону значений) </li></ul></ul><ul><ul><li>LIST (По точному списку значений) </li></ul></ul><ul><ul><li>HASH </li></ul></ul><ul><ul><li>KEY </li></ul></ul>
  18. 18. Шардинг <ul><ul><li>Шардинг – разделение данных на уровне ресурсов </li></ul></ul><ul><ul><li>Способы : </li></ul></ul><ul><ul><li>Вертикальный (Разделение таблиц по серверам) </li></ul></ul><ul><ul><li>Горизонтальный (Разделение логических частей данных по серверам) </li></ul></ul>
  19. 19. Вопросы <ul><ul><li>Вопросы ? </li></ul></ul>

×