Mysql для высоконагруженных систем Метелкин Михаил Геннадьевич, Ведущий Web-разработчик mihail.metelkin@softline.ru

Содержание

Слайд 2

Архитектура Mysql

Архитектура Mysql

Слайд 3

Архитектура Mysql

Архитектура Mysql

Слайд 4

Mysql Engines (характеристики) MyISAM Блокировка всей таблицы Автоматическая проверка и востановление

Mysql Engines (характеристики)

MyISAM
Блокировка всей таблицы
Автоматическая проверка и востановление таблиц
Поддерживает FULL-text

индексы
Отложенная запись данных индексов
Компрессия MyISAM таблиц
Слайд 5

Mysql Engines (характеристики) InnoDB Поддержка транзакций Использование механизма MVCC Поддержка внешних ключей

Mysql Engines (характеристики)

InnoDB
Поддержка транзакций
Использование механизма MVCC
Поддержка внешних ключей

Слайд 6

Mysql Engines (характеристики) Memory Engine(HEAP) Хранение данных в памяти Поддержка Hash

Mysql Engines (характеристики)

Memory Engine(HEAP)
Хранение данных в памяти
Поддержка Hash индексов
Поддержка только

строк фиксированной длины (CHAR)
Слайд 7

Mysql Engines (характеристики) Archive Engine Подержка только SELECT и INSERT запросов

Mysql Engines (характеристики)

Archive Engine
Подержка только SELECT и INSERT запросов
Не поддерживает

индексов
Поддержка блокировки на уровне строки
Слайд 8

Нахождение "узких мест“ производительности системы Определение производительности Транзакций в единицу времени

Нахождение "узких мест“ производительности системы

Определение производительности
Транзакций в единицу времени
Время отклика
Расширяемость
Конкурентность
Профилирование
Полное время

выполнения задачи
Время выполнения каждого запроса
Время открытия каждого соединения к mysql
Время вызова каждого внешнего ресурса (веб-сервисов и т.д.)
Вызов потенциально затратных функций
Системное время CPU
Слайд 9

Нахождение "узких мест“ производительности системы “Инструменты” для определения производительности аb (http://httpd.apache.org/docs/2.0/programs/ab.html)

Нахождение "узких мест“ производительности системы

“Инструменты” для определения производительности
а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

Нахождение "узких мест“ производительности системы

Профилирование
Логирование запросов (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 )

Нахождение "узких мест“ производительности системы

“Инструменты”для задач профилирования
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;

Нахождение "узких мест“ производительности системы

“Инструменты”для задач профилирования
SHOW PROFILE
mysql> SET profiling =

1;
Слайд 13

Оптимизация схемы и расстановка индексов Выбор оптимальных типов данных Наименьший из

Оптимизация схемы и расстановка индексов

Выбор оптимальных типов данных
Наименьший из приемлимых типов

данных
Наиболее простой из возможных
Избегайте Null по умолчанию
Расстановка индексов
Изоляция колонок в запросах
Наименьшая возможная длина индексов
Только необходимые индексы
Слайд 14

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

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

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

дл выборки
Особенно в запросах использующих JOIN
Правило “идеального запроса”- количество проверенных сервером строк ≈ количеству возвращенных строк
Полное сканирование таблиц – высшее зло!
Разбивайте очень сложные запросы на несколько составных
Производите операции с большими объемами данных частями
Слайд 15

Оптимизация запросов Декомпозиция JOIN’ ов Хранение результатов больших выборок в приложении

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

Декомпозиция JOIN’ ов
Хранение результатов больших выборок в приложении
Проверка использования индексов

при запросе
Использование Explain
Слайд 16

Репликация Репликация – синхронное/асинхронное копирование данных с ведущих серверов на ведомые.

Репликация
Репликация – синхронное/асинхронное копирование данных с ведущих серверов на ведомые.
Решаемые задачи:
Распределение

данных (географически).
Распределение нагрузки (Load balancing).
Backups
Отказоустойчивость
Тестирование апдейтов и новых версий Mysql.
Слайд 17

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

Партицирование

Партицирование – разбиение данных таблиц на логические части по выбранным критериям
Методы:
RANGE

(По диапазону значений)
LIST (По точному списку значений)
HASH
KEY
Слайд 18

Шардинг Шардинг – разделение данных на уровне ресурсов Способы: Вертикальный (Разделение

Шардинг

Шардинг – разделение данных на уровне ресурсов
Способы:
Вертикальный (Разделение таблиц по серверам)
Горизонтальный

(Разделение логических частей данных по серверам)