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