19
Mysql для высоконагруженных систем Метелкин Михаил Геннадьевич, Ведущий Web-разработчик [email protected]

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

Embed Size (px)

DESCRIPTION

 

Citation preview

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

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

систем

Метелкин Михаил Геннадьевич,Ведущий Web-разработчик[email protected]

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

SOFTWARE ● SERVICES ● EDUCATION ● CLOUDРоссия, Азербайджан, Армения, Беларусь, Грузия, Казахстан, Кыргызстан, Таджикистан, Туркменистан, Узбекистан, Украина, Монголия, Турция, Венесуэла, Вьетнам, Египет, Румыния, Аргентина, Молдова, Колумбия

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

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

SOFTWARE ● SERVICES ● EDUCATION ● CLOUDРоссия, Азербайджан, Армения, Беларусь, Грузия, Казахстан, Кыргызстан, Таджикистан, Туркменистан, Узбекистан, Украина, Монголия, Турция, Венесуэла, Вьетнам, Египет, Румыния, Аргентина, Молдова, Колумбия

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

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

SOFTWARE ● SERVICES ● EDUCATION ● CLOUDРоссия, Азербайджан, Армения, Беларусь, Грузия, Казахстан, Кыргызстан, Таджикистан, Туркменистан, Узбекистан, Украина, Монголия, Турция, Венесуэла, Вьетнам, Египет, Румыния, Аргентина, Молдова, Колумбия

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

MyISAM1.Блокировка всей таблицы2.Автоматическая проверка и востановление

таблиц3.Поддерживает FULL-text индексы4.Отложенная запись данных индексов5.Компрессия MyISAM таблиц

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

SOFTWARE ● SERVICES ● EDUCATION ● CLOUDРоссия, Азербайджан, Армения, Беларусь, Грузия, Казахстан, Кыргызстан, Таджикистан, Туркменистан, Узбекистан, Украина, Монголия, Турция, Венесуэла, Вьетнам, Египет, Румыния, Аргентина, Молдова, Колумбия

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

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

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

SOFTWARE ● SERVICES ● EDUCATION ● CLOUDРоссия, Азербайджан, Армения, Беларусь, Грузия, Казахстан, Кыргызстан, Таджикистан, Туркменистан, Узбекистан, Украина, Монголия, Турция, Венесуэла, Вьетнам, Египет, Румыния, Аргентина, Молдова, Колумбия

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

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

длины (CHAR)

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

SOFTWARE ● SERVICES ● EDUCATION ● CLOUDРоссия, Азербайджан, Армения, Беларусь, Грузия, Казахстан, Кыргызстан, Таджикистан, Туркменистан, Узбекистан, Украина, Монголия, Турция, Венесуэла, Вьетнам, Египет, Румыния, Аргентина, Молдова, Колумбия

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

Archive Engine1.Подержка только SELECT и INSERT запросов2.Не поддерживает индексов3.Поддержка блокировки на уровне строки

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

SOFTWARE ● SERVICES ● EDUCATION ● CLOUDРоссия, Азербайджан, Армения, Беларусь, Грузия, Казахстан, Кыргызстан, Таджикистан, Туркменистан, Узбекистан, Украина, Монголия, Турция, Венесуэла, Вьетнам, Египет, Румыния, Аргентина, Молдова, Колумбия

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

1. Транзакций в единицу времени2. Время отклика3. Расширяемость4. Конкурентность

2. Профилирование1. Полное время выполнения задачи2. Время выполнения каждого запроса3. Время открытия каждого соединения к mysql4. Время вызова каждого внешнего ресурса (веб-

сервисов и т.д.)5. Вызов потенциально затратных функций6. Системное время CPU

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

SOFTWARE ● SERVICES ● EDUCATION ● CLOUDРоссия, Азербайджан, Армения, Беларусь, Грузия, Казахстан, Кыргызстан, Таджикистан, Туркменистан, Узбекистан, Украина, Монголия, Турция, Венесуэла, Вьетнам, Египет, Румыния, Аргентина, Молдова, Колумбия

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

“Инструменты” для определения производительности

1. аb (http://httpd.apache.org/docs/2.0/programs/ab.html)2. http_load (http://www.acme.com/software/http_load/)3. JMeter (http://jakarta.apache.org/jmeter/)4. mysqlslap (

http://dev.mysql.com/doc/refman/5.1/en/mysqlslap.html)5. Sysbench (http://sysbench.sourceforge.net/)6. Database Test Suite

(http://sourceforge.net/projects/osdldbt/)7. MySQL Benchmark Suite

(http://dev.mysql.com/doc/en/mysql-benchmarks.html/ )8. Super Smack (http://vegan.net/tony/supersmack/)

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

SOFTWARE ● SERVICES ● EDUCATION ● CLOUDРоссия, Азербайджан, Армения, Беларусь, Грузия, Казахстан, Кыргызстан, Таджикистан, Туркменистан, Узбекистан, Украина, Монголия, Турция, Венесуэла, Вьетнам, Египет, Румыния, Аргентина, Молдова, Колумбия

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

Профилирование

1. Логирование запросов (general log, slow log ). Конфигурационные настройки :

log = <file_name>

log-slow-queries = <file_name>

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 )

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

SOFTWARE ● SERVICES ● EDUCATION ● CLOUDРоссия, Азербайджан, Армения, Беларусь, Грузия, Казахстан, Кыргызстан, Таджикистан, Туркменистан, Узбекистан, Украина, Монголия, Турция, Венесуэла, Вьетнам, Египет, Румыния, Аргентина, Молдова, Колумбия

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

“Инструменты”для задач профилированияmysql_slow_log_parser

(http://www.mysqlperformanceblog.com/files/utils/mysql_slow_log_parser ) mysqlsla (http://hackmysql.com/mysqlsla)

2. SHOW STATUSmysql> FLUSH STATUS;

mysql> SHOW SESSION STATUS LIKE 'Select%';

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

SOFTWARE ● SERVICES ● EDUCATION ● CLOUDРоссия, Азербайджан, Армения, Беларусь, Грузия, Казахстан, Кыргызстан, Таджикистан, Туркменистан, Узбекистан, Украина, Монголия, Турция, Венесуэла, Вьетнам, Египет, Румыния, Аргентина, Молдова, Колумбия

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

“Инструменты”для задач профилирования3. SHOW PROFILE

mysql> SET profiling = 1;

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

SOFTWARE ● SERVICES ● EDUCATION ● CLOUDРоссия, Азербайджан, Армения, Беларусь, Грузия, Казахстан, Кыргызстан, Таджикистан, Туркменистан, Узбекистан, Украина, Монголия, Турция, Венесуэла, Вьетнам, Египет, Румыния, Аргентина, Молдова, Колумбия

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

1. Выбор оптимальных типов данных1. Наименьший из приемлимых типов данных2. Наиболее простой из возможных3. Избегайте Null по умолчанию

2. Расстановка индексов1. Изоляция колонок в запросах2. Наименьшая возможная длина индексов3. Только необходимые индексы

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

SOFTWARE ● SERVICES ● EDUCATION ● CLOUDРоссия, Азербайджан, Армения, Беларусь, Грузия, Казахстан, Кыргызстан, Таджикистан, Туркменистан, Узбекистан, Украина, Монголия, Турция, Венесуэла, Вьетнам, Египет, Румыния, Аргентина, Молдова, Колумбия

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

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

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

3. Особенно в запросах использующих JOIN4. Правило “идеального запроса”- количество

проверенных сервером строк ≈ количеству возвращенных строк

5. Полное сканирование таблиц – высшее зло!6. Разбивайте очень сложные запросы на

несколько составных7. Производите операции с большими

объемами данных частями

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

SOFTWARE ● SERVICES ● EDUCATION ● CLOUDРоссия, Азербайджан, Армения, Беларусь, Грузия, Казахстан, Кыргызстан, Таджикистан, Туркменистан, Узбекистан, Украина, Монголия, Турция, Венесуэла, Вьетнам, Египет, Румыния, Аргентина, Молдова, Колумбия

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

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

приложении10.Проверка использования индексов при

запросе11.Использование Explain

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

SOFTWARE ● SERVICES ● EDUCATION ● CLOUDРоссия, Азербайджан, Армения, Беларусь, Грузия, Казахстан, Кыргызстан, Таджикистан, Туркменистан, Узбекистан, Украина, Монголия, Турция, Венесуэла, Вьетнам, Египет, Румыния, Аргентина, Молдова, Колумбия

Репликация

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

Решаемые задачи:

1. Распределение данных (географически).2. Распределение нагрузки (Load balancing).3. Backups4. Отказоустойчивость5. Тестирование апдейтов и новых версий

Mysql.

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

SOFTWARE ● SERVICES ● EDUCATION ● CLOUDРоссия, Азербайджан, Армения, Беларусь, Грузия, Казахстан, Кыргызстан, Таджикистан, Туркменистан, Узбекистан, Украина, Монголия, Турция, Венесуэла, Вьетнам, Египет, Румыния, Аргентина, Молдова, Колумбия

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

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

Методы:1. RANGE (По диапазону значений)2. LIST (По точному списку значений)3. HASH4. KEY

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

SOFTWARE ● SERVICES ● EDUCATION ● CLOUDРоссия, Азербайджан, Армения, Беларусь, Грузия, Казахстан, Кыргызстан, Таджикистан, Туркменистан, Узбекистан, Украина, Монголия, Турция, Венесуэла, Вьетнам, Египет, Румыния, Аргентина, Молдова, Колумбия

Шардинг

Шардинг – разделение данных на уровне ресурсов

Способы:1. Вертикальный (Разделение таблиц по

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

частей данных по серверам)

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

SOFTWARE ● SERVICES ● EDUCATION ● CLOUDРоссия, Азербайджан, Армения, Беларусь, Грузия, Казахстан, Кыргызстан, Таджикистан, Туркменистан, Узбекистан, Украина, Монголия, Турция, Венесуэла, Вьетнам, Египет, Румыния, Аргентина, Молдова, Колумбия

Вопросы

Вопросы?