SlideShare a Scribd company logo
1 of 50
MyRocks:
Табличный
Движок для
MySQL
Алексей Майков
Сергей Петруня
• Мотивация
• Тех. Показатели
• Устройство
• Как попробовать
• Особенности
• Мотивация
• Тех. Показатели
• Устройство
• Как попробовать
• Особенности
*MySQL is a registered trademark of Oracle Corporation
MyRocks
Размер базы (GB) (Linkbench)
1172
574
InnoDB RocksDB
Megabytes/s written (Linkbench)
150
70
InnoDB RocksDB
Размер базы (GB) (Prod)
(zlib level1
compression)
1089
525.4
InnoDB RockDB
Terabytes written (Prod)
0
4
8
12
InnoDB 2x RocksDB
Flash GC
Binlog / Relay log
Storage engine
Flash read rates (Prod)
• RocksDB > InnoDB * 1.5
• Flash справляется!
Time
RocksDB (2x)
InnoDB
=> 37 Tb
=> 12 Tb
Cumulative Response Times (Prod)
0
50
100
150
200
250
300
< 15ms < 75ms < 250ms < 1000ms
Kilo-Queries
RocksDB x2
InnoDB
CPU Idle (Prod)
Time
InnoDB
2x RocksDB
100%
0%
80%
50-60%
• Мотивация
• Тех. Показатели
• Устройство
• Как попробовать
• Особенности
Ограниченность InnoDB
• B*-treе
• Страничное хранение
– Изменение = запись
страницы
– Сжатие тоже постраничное
amplification =
Размер на диске
Размер данных
• Read amplification – устраивает
• Write amplification – проблема
• Size amplification – проблема.
1
10
20
1
3
5
10
12
17
20
25
12
Log-Structured Merge (LSM)
MemTableЗапись
Log SST
• Пишем в MemTable+Log
• MemTable → Sorted String Table
MemTable
Log-Structured Merge (LSM)
MemTableЗапись
Log SST
• Пишем в MemTable+Log
• MemTable → Sorted String Table
– Линейная запись
– Плотно, с компрессией.
MemTable
Log-Structured Merge (LSM)
MemTableЗапись
Log SST
• Пишем в MemTable+Log
• MemTable → Sorted String Table
MemTable
Log-Structured Merge (LSM)
MemTableЗапись
Log SST
• Пишем в MemTable+Log
• MemTable → Sorted String Table
• MemTable #2 → Sorted String Table #2
• ...
SST . . .
Чтение данных в LSM
MemTable Чтение
Log SST SST . . .
• Чтение = слияние данных
• Read amplification ↑↑ 
SST
Compaction – слияние SST
SST SST . . .Цели
• Уменьшение числа
SST-файлов
скорость чтения ↑
• Удаление старых версий
записей размер ↓
SST
SST
Метод
• Слияние сортированных файлов
– Пишем последовательно
– Пишем плотно
– Хорошее сжатие.
Как делать compaction
• Избегать крайностей
– Редко: слишком много SST
– Часто: большой write amplification
• Работать эффективно
– Сливать файлы похожих размеров
– Сливать файлы с разными версиями
одной записи
• Есть много алгоритмов
– Size-tiered
– Leveled
– Date-tiered
– FIFO
a-b c-g f-k l-q za-b a-b
Leveled compaction
a-c a-f
. . . . . . . . . . . .
b-gL0
L1 a-e f-i j-n o-z
L2 h-k o-r s-w
L5
MemTable
x-z
N*5 mb
50 mb
500 mba-c e-g l-n
g-h n-q t-u x-yd-e j-ka-b
a-ba-b c-g f-k l-q za-b
Leveled compaction
a-c a-f
. . . . . . . . . . . .
b-gL0
L1 a-e f-i j-n o-z
L2 h-k o-r s-w
L5
MemTable
x-z
N*5 mb
50 mb
500 mba-c e-g l-n
g-h n-q t-u x-yd-e j-ka-b
MemTable
read(key) 5 + #L0 операций
a-b c-g f-k l-q za-b a-b
Leveled compaction
a-c a-f
. . . . . . . . . . . .
b-gL0
L1 a-e f-i j-n o-z
L2 h-k o-r s-w
L5
MemTable
x-z
N*5 mb
50 mb
500 mba-c e-g l-n
g-h n-q t-u x-yd-e j-ka-b
a-b c-g f-k l-q za-b a-b
Leveled compaction
a-c a-f
. . . . . . . . . . . .
b-gL0
L1 a-e f-i j-n o-z
L2 h-k o-r s-w
L5
MemTable
x-z
N*5 mb
50 mb
500 mba-c e-g l-n
g-h n-q t-u x-yd-e j-ka-b
a-b c-g f-k l-q za-b a-b
Leveled compaction
a-c a-f
. . . . . . . . . . . .
b-gL0
L1 a-e f-i j-n o-z
L2 h-k o-r s-w
L5
MemTable
x-z
N*5 mb
50 mb
500 mba-c e-g l-n
g-h n-q t-u x-yd-e j-ka-b
Leveled compaction - выводы
• read amp. <= #L0+5
• Новые изменения сливаются
друг с другом
• write amp. <= 5*level_fanout +1
• size amp. ~ 1.11
• И мигрируют в старые уровни.
Log-Structured Merge – выводы
• Уменьшает write amplification
меньше операций записи
• Уменьшает size amplification
размер БД на диске меньше
• Увеличивает read amplification
читаем из нескольких SST.
LevelDB – реализация LSM
+ Встраиваемая библиотека на С++
+ Key/value store на LSM
+ Level-ed compaction
+ Разработана в Google для Chrome
+ Open Source
– Не для серверных нагрузок.
• Форкнули LevelDB
• Добавили
– Multi-threaded Compaction
– Multi-threaded MemTable flush
– Throttling, если compaction не
успевает
– Prefix bloom filter для range scans
– Column Families
– И т д.
http://rocksdb.org
• Facebook
• LinkedIn
• Yahoo
• CockroachDB
• DNANexus
• …
Применение
Ограничения RocksDB
• Это key/value store
– Put(key, value), Delete(key)
– Write(WriteBatch)
• Нет
– Отдельных таблиц
– Типов данных
– Вторичных индексов
– ...
create table tbl (
pk int primary key,
...
) engine=RocksDB;
MySQL* + MyRocks=
• Табличный движок для MySQL
• Данные хранятся в RocksDB
• Конфигурация и диагностика
RocksDB через MySQL.
MyRocks готов к тестам
• SQL-семантика
• Транзакционный
– REPEATABLE READ
– READ COMMITTED
• Поддержка всех типов данных
• Поддержка индексов
– PRIMARY/UNIQUE/Secondary
– Поиск по всем видам условий
– Статистика для оптимизатора
• Можно пробовать приложения
• Мотивация
• Тех. Показатели
• Устройство
• Как попробовать
• Особенности
Как попробовать
• https://github.com/facebook/mysql-5.6/
• В будущем - в MariaDB (?)
• Присылайте вопросы, баги,
отзывы, идеи, патчи
• Обсуждение
– https://github.com/facebook/mysql-
5.6/issues/
– http://facebook.com/groups/rocksdb-dev
Настройки LSM
MemTable
Level 0
Level 1
Level 2
Level 3
File File
File File File
File File File File
File File File File File
LOG
(WAL)
Compaction
Flush
show engine rocksdb status;
https://github.com/facebook/rocksdb/wiki/RocksDB-Tuning-Guide
Настройки MyRocks
set global rocksdb_default_cf_options
='write_buffer_size=12m;target_file_siz
e_base=1m;max_bytes_for_level_multiplie
r=10'
• Настройка default column family
• Другие column families
• > 84 rocksdb_* переменных
set global rocksdb_override_cf_options
• Мотивация
• Тех. Показатели
• Устройство
• Как попробовать
• Особенности
Особенности SQL на LSM
• myrockshotbackup
• Сканирование в обратную
сторону.
• Bloom filters для range
scans
• Tombstones после массового
DELETE
myrockshotbackup
• Local server:
set rocksdb_create_checkpoint=
'/data/mysql/backup'
myrockshotbackup | ssh "tar zxf-"
• Remote:
myrockshotbackup –-move_back
• Create checkpoint
Сканирование в обратную сторону
• Проблема
– Большой размер блока
– Компрессия
– Читать с конца нельзя
• Решение: Column Family c хранением данных в
обратном порядке
select *
from user_messages
where user_id=1234
order by date desc limit 10
create table user_messages (
...
KEY key1(user_id,date) comment 'rev:cf_name'
Bloom filters для range scans
• Читаем из многих источников
• tbl.key=c1
• Во многих SST
ключа с1 нет
• Bloom Filter в
каждой SST.
MemTable Чтение
SST SST SST
Bloom filters для range scans
MemTable Чтение
SST SST SST
INDEX ON t1(col1, col2, …)
index_nr col1 col2 …
• tbl.key BETWEEN 10 AND 20
• Надо проверять
все SST
• И Bloom Filter
не применим 
• Bloom filter на
префикс:
Tombstones после DELETE
• DELETE создает tombstones
delete from messages
where date='2015-11-01'
select * from messages
where date>='2015-11-01'
• Решение
– Детектировать это при записи в SST
– Немедленно назначать compaction.
• При чтении их пропускают
В MyRocks нет всех фич
• PRIMARY KEY обязателен
• ‘index only’ не для всех типов данных
• ALTER TABLE медленный
• Размер транзакции ограничен
• Нет crash-safe master
(пользуемся semi-sync)
• ...
Выводы
• Табличный движок MyRocks основан на
RocksDB
• Приносит LSM серверного уровня в MySQL
• Решает проблемы write-heavy загрузки
– Меньше места на диске
– Меньше операций записи (износ SSD)
– «В 2 раза меньше InnoDB по тому и другому, без
замедления чтения»
• Состояние
– Интенсивная разработка (не все сценарии
покрыты)
– Но пробовать уже можно
– Open Source: приглашаем к сотрудничеству.
Ссылки
• RocksDB Storage Engine for MySQL and MongoDB,
Igor Canadi
https://www.percona.com/live/europe-amsterdam-
2015/sessions/rocksdb-storage-engine-mysql-and-
mongodb
• MySQL on RocksDB (MyRocks), Herman Lee
https://www.percona.com/live/europe-amsterdam-
2015/sessions/mysql-rocksdb-myrocks
MyRocks
+
MySQL
+ MySQL = MyRocks

More Related Content

What's hot

ekbpy'2012 - Данила Штань - Распределенное хранилище
ekbpy'2012 - Данила Штань - Распределенное хранилищеekbpy'2012 - Данила Штань - Распределенное хранилище
ekbpy'2012 - Данила Штань - Распределенное хранилищеit-people
 
My talk at Highload++ 2015
My talk at Highload++ 2015My talk at Highload++ 2015
My talk at Highload++ 2015Alex Chistyakov
 
Технологии хранения для больших проектов / Сергей Платонов (RAIDIX)
Технологии хранения для больших проектов / Сергей Платонов (RAIDIX)Технологии хранения для больших проектов / Сергей Платонов (RAIDIX)
Технологии хранения для больших проектов / Сергей Платонов (RAIDIX)Ontico
 
Антон Турецкий
Антон ТурецкийАнтон Турецкий
Антон ТурецкийCodeFest
 
За счет чего Tarantool такой оптимальный / Денис Аникин (Mail.Ru)
За счет чего Tarantool такой оптимальный / Денис Аникин (Mail.Ru)За счет чего Tarantool такой оптимальный / Денис Аникин (Mail.Ru)
За счет чего Tarantool такой оптимальный / Денис Аникин (Mail.Ru)Ontico
 
Загрузка больших объемов данных для бизнес-аналитики
Загрузка больших объемов данных для бизнес-аналитикиЗагрузка больших объемов данных для бизнес-аналитики
Загрузка больших объемов данных для бизнес-аналитикиBadoo Development
 
Где живут Ваши объявления / Тюрин Михаил (Avito)
Где живут Ваши объявления / Тюрин Михаил (Avito)Где живут Ваши объявления / Тюрин Михаил (Avito)
Где живут Ваши объявления / Тюрин Михаил (Avito)Ontico
 
Docker в работе: взгляд на использование в Badoo через год
Docker в работе: взгляд на использование в Badoo через годDocker в работе: взгляд на использование в Badoo через год
Docker в работе: взгляд на использование в Badoo через годBadoo Development
 
HDD, SSD, RAM, RAID, и кого на ком кэшировать / Михаил Конюхов (Perfect Solut...
HDD, SSD, RAM, RAID, и кого на ком кэшировать / Михаил Конюхов (Perfect Solut...HDD, SSD, RAM, RAID, и кого на ком кэшировать / Михаил Конюхов (Perfect Solut...
HDD, SSD, RAM, RAID, и кого на ком кэшировать / Михаил Конюхов (Perfect Solut...Ontico
 
Релиз инжиниринг Mail.ru, взгляд изнутри / Максим Глеков (Mail.Ru Group)
Релиз инжиниринг Mail.ru, взгляд изнутри / Максим Глеков (Mail.Ru Group)Релиз инжиниринг Mail.ru, взгляд изнутри / Максим Глеков (Mail.Ru Group)
Релиз инжиниринг Mail.ru, взгляд изнутри / Максим Глеков (Mail.Ru Group)Ontico
 
Android Cloud... точнее Cloud из Android / Охрименко Алексей (Acronis)
Android Cloud... точнее Cloud из Android / Охрименко Алексей (Acronis)Android Cloud... точнее Cloud из Android / Охрименко Алексей (Acronis)
Android Cloud... точнее Cloud из Android / Охрименко Алексей (Acronis)Ontico
 
Вячеслав Бахмутов
Вячеслав БахмутовВячеслав Бахмутов
Вячеслав БахмутовCodeFest
 
Денис Иванов
Денис ИвановДенис Иванов
Денис ИвановCodeFest
 
Кэширование данных в web приложениях. Использование memcached / Юрий Красноще...
Кэширование данных в web приложениях. Использование memcached / Юрий Красноще...Кэширование данных в web приложениях. Использование memcached / Юрий Красноще...
Кэширование данных в web приложениях. Использование memcached / Юрий Красноще...Ontico
 
Тестируем производительность распределённых систем, Александр Киров (Parallels)
Тестируем производительность распределённых систем, Александр Киров (Parallels)Тестируем производительность распределённых систем, Александр Киров (Parallels)
Тестируем производительность распределённых систем, Александр Киров (Parallels)Ontico
 
Что нового и полезного в PostgreSQL 9.5 / Илья Космодемьянский (PostgreSQL-Co...
Что нового и полезного в PostgreSQL 9.5 / Илья Космодемьянский (PostgreSQL-Co...Что нового и полезного в PostgreSQL 9.5 / Илья Космодемьянский (PostgreSQL-Co...
Что нового и полезного в PostgreSQL 9.5 / Илья Космодемьянский (PostgreSQL-Co...Ontico
 
Оптимизация программ для современных процессоров и Linux, Александр Крижановс...
Оптимизация программ для современных процессоров и Linux, Александр Крижановс...Оптимизация программ для современных процессоров и Linux, Александр Крижановс...
Оптимизация программ для современных процессоров и Linux, Александр Крижановс...Ontico
 
Чем заняться вечером, если я знаю сколько будет ++i + ++i / Андрей Бородин (Y...
Чем заняться вечером, если я знаю сколько будет ++i + ++i / Андрей Бородин (Y...Чем заняться вечером, если я знаю сколько будет ++i + ++i / Андрей Бородин (Y...
Чем заняться вечером, если я знаю сколько будет ++i + ++i / Андрей Бородин (Y...Ontico
 
Брокер сообщений Kafka в условиях повышенной нагрузки / Артём Выборнов (Rambl...
Брокер сообщений Kafka в условиях повышенной нагрузки / Артём Выборнов (Rambl...Брокер сообщений Kafka в условиях повышенной нагрузки / Артём Выборнов (Rambl...
Брокер сообщений Kafka в условиях повышенной нагрузки / Артём Выборнов (Rambl...Ontico
 
Семантическое ядро рунета - высоконагруженная сontent-based рекомендательная ...
Семантическое ядро рунета - высоконагруженная сontent-based рекомендательная ...Семантическое ядро рунета - высоконагруженная сontent-based рекомендательная ...
Семантическое ядро рунета - высоконагруженная сontent-based рекомендательная ...Ontico
 

What's hot (20)

ekbpy'2012 - Данила Штань - Распределенное хранилище
ekbpy'2012 - Данила Штань - Распределенное хранилищеekbpy'2012 - Данила Штань - Распределенное хранилище
ekbpy'2012 - Данила Штань - Распределенное хранилище
 
My talk at Highload++ 2015
My talk at Highload++ 2015My talk at Highload++ 2015
My talk at Highload++ 2015
 
Технологии хранения для больших проектов / Сергей Платонов (RAIDIX)
Технологии хранения для больших проектов / Сергей Платонов (RAIDIX)Технологии хранения для больших проектов / Сергей Платонов (RAIDIX)
Технологии хранения для больших проектов / Сергей Платонов (RAIDIX)
 
Антон Турецкий
Антон ТурецкийАнтон Турецкий
Антон Турецкий
 
За счет чего Tarantool такой оптимальный / Денис Аникин (Mail.Ru)
За счет чего Tarantool такой оптимальный / Денис Аникин (Mail.Ru)За счет чего Tarantool такой оптимальный / Денис Аникин (Mail.Ru)
За счет чего Tarantool такой оптимальный / Денис Аникин (Mail.Ru)
 
Загрузка больших объемов данных для бизнес-аналитики
Загрузка больших объемов данных для бизнес-аналитикиЗагрузка больших объемов данных для бизнес-аналитики
Загрузка больших объемов данных для бизнес-аналитики
 
Где живут Ваши объявления / Тюрин Михаил (Avito)
Где живут Ваши объявления / Тюрин Михаил (Avito)Где живут Ваши объявления / Тюрин Михаил (Avito)
Где живут Ваши объявления / Тюрин Михаил (Avito)
 
Docker в работе: взгляд на использование в Badoo через год
Docker в работе: взгляд на использование в Badoo через годDocker в работе: взгляд на использование в Badoo через год
Docker в работе: взгляд на использование в Badoo через год
 
HDD, SSD, RAM, RAID, и кого на ком кэшировать / Михаил Конюхов (Perfect Solut...
HDD, SSD, RAM, RAID, и кого на ком кэшировать / Михаил Конюхов (Perfect Solut...HDD, SSD, RAM, RAID, и кого на ком кэшировать / Михаил Конюхов (Perfect Solut...
HDD, SSD, RAM, RAID, и кого на ком кэшировать / Михаил Конюхов (Perfect Solut...
 
Релиз инжиниринг Mail.ru, взгляд изнутри / Максим Глеков (Mail.Ru Group)
Релиз инжиниринг Mail.ru, взгляд изнутри / Максим Глеков (Mail.Ru Group)Релиз инжиниринг Mail.ru, взгляд изнутри / Максим Глеков (Mail.Ru Group)
Релиз инжиниринг Mail.ru, взгляд изнутри / Максим Глеков (Mail.Ru Group)
 
Android Cloud... точнее Cloud из Android / Охрименко Алексей (Acronis)
Android Cloud... точнее Cloud из Android / Охрименко Алексей (Acronis)Android Cloud... точнее Cloud из Android / Охрименко Алексей (Acronis)
Android Cloud... точнее Cloud из Android / Охрименко Алексей (Acronis)
 
Вячеслав Бахмутов
Вячеслав БахмутовВячеслав Бахмутов
Вячеслав Бахмутов
 
Денис Иванов
Денис ИвановДенис Иванов
Денис Иванов
 
Кэширование данных в web приложениях. Использование memcached / Юрий Красноще...
Кэширование данных в web приложениях. Использование memcached / Юрий Красноще...Кэширование данных в web приложениях. Использование memcached / Юрий Красноще...
Кэширование данных в web приложениях. Использование memcached / Юрий Красноще...
 
Тестируем производительность распределённых систем, Александр Киров (Parallels)
Тестируем производительность распределённых систем, Александр Киров (Parallels)Тестируем производительность распределённых систем, Александр Киров (Parallels)
Тестируем производительность распределённых систем, Александр Киров (Parallels)
 
Что нового и полезного в PostgreSQL 9.5 / Илья Космодемьянский (PostgreSQL-Co...
Что нового и полезного в PostgreSQL 9.5 / Илья Космодемьянский (PostgreSQL-Co...Что нового и полезного в PostgreSQL 9.5 / Илья Космодемьянский (PostgreSQL-Co...
Что нового и полезного в PostgreSQL 9.5 / Илья Космодемьянский (PostgreSQL-Co...
 
Оптимизация программ для современных процессоров и Linux, Александр Крижановс...
Оптимизация программ для современных процессоров и Linux, Александр Крижановс...Оптимизация программ для современных процессоров и Linux, Александр Крижановс...
Оптимизация программ для современных процессоров и Linux, Александр Крижановс...
 
Чем заняться вечером, если я знаю сколько будет ++i + ++i / Андрей Бородин (Y...
Чем заняться вечером, если я знаю сколько будет ++i + ++i / Андрей Бородин (Y...Чем заняться вечером, если я знаю сколько будет ++i + ++i / Андрей Бородин (Y...
Чем заняться вечером, если я знаю сколько будет ++i + ++i / Андрей Бородин (Y...
 
Брокер сообщений Kafka в условиях повышенной нагрузки / Артём Выборнов (Rambl...
Брокер сообщений Kafka в условиях повышенной нагрузки / Артём Выборнов (Rambl...Брокер сообщений Kafka в условиях повышенной нагрузки / Артём Выборнов (Rambl...
Брокер сообщений Kafka в условиях повышенной нагрузки / Артём Выборнов (Rambl...
 
Семантическое ядро рунета - высоконагруженная сontent-based рекомендательная ...
Семантическое ядро рунета - высоконагруженная сontent-based рекомендательная ...Семантическое ядро рунета - высоконагруженная сontent-based рекомендательная ...
Семантическое ядро рунета - высоконагруженная сontent-based рекомендательная ...
 

Similar to High Load

Практика использования NoSQL в высоконагруженном проекте (Дмитрий Ананьев)
Практика использования NoSQL в высоконагруженном проекте (Дмитрий Ананьев)Практика использования NoSQL в высоконагруженном проекте (Дмитрий Ананьев)
Практика использования NoSQL в высоконагруженном проекте (Дмитрий Ананьев)Ontico
 
DevConf-2015: Lightning Memory-Mapped Database (LMDB), ReOpen IT
DevConf-2015: Lightning Memory-Mapped Database (LMDB), ReOpen ITDevConf-2015: Lightning Memory-Mapped Database (LMDB), ReOpen IT
DevConf-2015: Lightning Memory-Mapped Database (LMDB), ReOpen ITLeonid Yuriev
 
Percona XtraBackup: экспертные возможности (Алексей Копытов)
Percona XtraBackup: экспертные возможности (Алексей Копытов)Percona XtraBackup: экспертные возможности (Алексей Копытов)
Percona XtraBackup: экспертные возможности (Алексей Копытов)Ontico
 
Олег Анастасьев "Ближе к Cassandra". Выступление на Cassandra Conf 2013
Олег Анастасьев "Ближе к Cassandra". Выступление на Cassandra Conf 2013Олег Анастасьев "Ближе к Cassandra". Выступление на Cassandra Conf 2013
Олег Анастасьев "Ближе к Cassandra". Выступление на Cassandra Conf 2013it-people
 
Как мы храним и анализируем большой социальный граф, Максим Бартенев (Норси-т...
Как мы храним и анализируем большой социальный граф, Максим Бартенев (Норси-т...Как мы храним и анализируем большой социальный граф, Максим Бартенев (Норси-т...
Как мы храним и анализируем большой социальный граф, Максим Бартенев (Норси-т...Ontico
 
Oracle NoSQL Database
Oracle NoSQL DatabaseOracle NoSQL Database
Oracle NoSQL DatabaseAndrey Akulov
 
Обзор перспективных баз данных для highload / Юрий Насретдинов
Обзор перспективных баз данных для highload / Юрий НасретдиновОбзор перспективных баз данных для highload / Юрий Насретдинов
Обзор перспективных баз данных для highload / Юрий НасретдиновOntico
 
Микросервисы: опыт использования в нагруженном проекте / Вадим Мадисон (М-Тех)
Микросервисы: опыт использования в нагруженном проекте / Вадим Мадисон (М-Тех)Микросервисы: опыт использования в нагруженном проекте / Вадим Мадисон (М-Тех)
Микросервисы: опыт использования в нагруженном проекте / Вадим Мадисон (М-Тех)Ontico
 
Сергей Житинский, Александр Чистяков (Git in Sky)
Сергей Житинский, Александр Чистяков (Git in Sky)Сергей Житинский, Александр Чистяков (Git in Sky)
Сергей Житинский, Александр Чистяков (Git in Sky)Ontico
 
распределенное файловое хранилище (Nginx, zfs, perl). перепелица мамонтов. зал 2
распределенное файловое хранилище (Nginx, zfs, perl). перепелица мамонтов. зал 2распределенное файловое хранилище (Nginx, zfs, perl). перепелица мамонтов. зал 2
распределенное файловое хранилище (Nginx, zfs, perl). перепелица мамонтов. зал 2rit2011
 
Cassandra:Курс молодого бойца
Cassandra:Курс молодого бойцаCassandra:Курс молодого бойца
Cassandra:Курс молодого бойцаIgor Khokhryakov
 
Реактивный раздатчик ok.ru/music
Реактивный раздатчик ok.ru/musicРеактивный раздатчик ok.ru/music
Реактивный раздатчик ok.ru/musicVadim Tsesko
 
Обзор Redis storage / Symfony Camp UA 2011
Обзор Redis storage / Symfony Camp UA 2011Обзор Redis storage / Symfony Camp UA 2011
Обзор Redis storage / Symfony Camp UA 2011Igor Brovchenko
 
Ускоряем и разгружаем веб-сервер, прозрачно кэшируя на SSD, Станислав Николов...
Ускоряем и разгружаем веб-сервер, прозрачно кэшируя на SSD, Станислав Николов...Ускоряем и разгружаем веб-сервер, прозрачно кэшируя на SSD, Станислав Николов...
Ускоряем и разгружаем веб-сервер, прозрачно кэшируя на SSD, Станислав Николов...Ontico
 
Tempesta FW: challenges, internals, use cases / Александр Крижановский (Tempe...
Tempesta FW: challenges, internals, use cases / Александр Крижановский (Tempe...Tempesta FW: challenges, internals, use cases / Александр Крижановский (Tempe...
Tempesta FW: challenges, internals, use cases / Александр Крижановский (Tempe...Ontico
 
Aлександр Зайцев, LifeStreet
Aлександр Зайцев, LifeStreetAлександр Зайцев, LifeStreet
Aлександр Зайцев, LifeStreetOntico
 
Hosting for forbes.ru_
Hosting for forbes.ru_Hosting for forbes.ru_
Hosting for forbes.ru_drupalconf
 
Devconf2013 new-features-in-mysql-and-mariadb
Devconf2013 new-features-in-mysql-and-mariadbDevconf2013 new-features-in-mysql-and-mariadb
Devconf2013 new-features-in-mysql-and-mariadbSergey Petrunya
 
Как устроена MySQL-репликация, Андрей Аксенов (Sphinx)
Как устроена MySQL-репликация, Андрей Аксенов (Sphinx)Как устроена MySQL-репликация, Андрей Аксенов (Sphinx)
Как устроена MySQL-репликация, Андрей Аксенов (Sphinx)Ontico
 
Современная операционная система: что надо знать разработчику / Александр Кри...
Современная операционная система: что надо знать разработчику / Александр Кри...Современная операционная система: что надо знать разработчику / Александр Кри...
Современная операционная система: что надо знать разработчику / Александр Кри...Ontico
 

Similar to High Load (20)

Практика использования NoSQL в высоконагруженном проекте (Дмитрий Ананьев)
Практика использования NoSQL в высоконагруженном проекте (Дмитрий Ананьев)Практика использования NoSQL в высоконагруженном проекте (Дмитрий Ананьев)
Практика использования NoSQL в высоконагруженном проекте (Дмитрий Ананьев)
 
DevConf-2015: Lightning Memory-Mapped Database (LMDB), ReOpen IT
DevConf-2015: Lightning Memory-Mapped Database (LMDB), ReOpen ITDevConf-2015: Lightning Memory-Mapped Database (LMDB), ReOpen IT
DevConf-2015: Lightning Memory-Mapped Database (LMDB), ReOpen IT
 
Percona XtraBackup: экспертные возможности (Алексей Копытов)
Percona XtraBackup: экспертные возможности (Алексей Копытов)Percona XtraBackup: экспертные возможности (Алексей Копытов)
Percona XtraBackup: экспертные возможности (Алексей Копытов)
 
Олег Анастасьев "Ближе к Cassandra". Выступление на Cassandra Conf 2013
Олег Анастасьев "Ближе к Cassandra". Выступление на Cassandra Conf 2013Олег Анастасьев "Ближе к Cassandra". Выступление на Cassandra Conf 2013
Олег Анастасьев "Ближе к Cassandra". Выступление на Cassandra Conf 2013
 
Как мы храним и анализируем большой социальный граф, Максим Бартенев (Норси-т...
Как мы храним и анализируем большой социальный граф, Максим Бартенев (Норси-т...Как мы храним и анализируем большой социальный граф, Максим Бартенев (Норси-т...
Как мы храним и анализируем большой социальный граф, Максим Бартенев (Норси-т...
 
Oracle NoSQL Database
Oracle NoSQL DatabaseOracle NoSQL Database
Oracle NoSQL Database
 
Обзор перспективных баз данных для highload / Юрий Насретдинов
Обзор перспективных баз данных для highload / Юрий НасретдиновОбзор перспективных баз данных для highload / Юрий Насретдинов
Обзор перспективных баз данных для highload / Юрий Насретдинов
 
Микросервисы: опыт использования в нагруженном проекте / Вадим Мадисон (М-Тех)
Микросервисы: опыт использования в нагруженном проекте / Вадим Мадисон (М-Тех)Микросервисы: опыт использования в нагруженном проекте / Вадим Мадисон (М-Тех)
Микросервисы: опыт использования в нагруженном проекте / Вадим Мадисон (М-Тех)
 
Сергей Житинский, Александр Чистяков (Git in Sky)
Сергей Житинский, Александр Чистяков (Git in Sky)Сергей Житинский, Александр Чистяков (Git in Sky)
Сергей Житинский, Александр Чистяков (Git in Sky)
 
распределенное файловое хранилище (Nginx, zfs, perl). перепелица мамонтов. зал 2
распределенное файловое хранилище (Nginx, zfs, perl). перепелица мамонтов. зал 2распределенное файловое хранилище (Nginx, zfs, perl). перепелица мамонтов. зал 2
распределенное файловое хранилище (Nginx, zfs, perl). перепелица мамонтов. зал 2
 
Cassandra:Курс молодого бойца
Cassandra:Курс молодого бойцаCassandra:Курс молодого бойца
Cassandra:Курс молодого бойца
 
Реактивный раздатчик ok.ru/music
Реактивный раздатчик ok.ru/musicРеактивный раздатчик ok.ru/music
Реактивный раздатчик ok.ru/music
 
Обзор Redis storage / Symfony Camp UA 2011
Обзор Redis storage / Symfony Camp UA 2011Обзор Redis storage / Symfony Camp UA 2011
Обзор Redis storage / Symfony Camp UA 2011
 
Ускоряем и разгружаем веб-сервер, прозрачно кэшируя на SSD, Станислав Николов...
Ускоряем и разгружаем веб-сервер, прозрачно кэшируя на SSD, Станислав Николов...Ускоряем и разгружаем веб-сервер, прозрачно кэшируя на SSD, Станислав Николов...
Ускоряем и разгружаем веб-сервер, прозрачно кэшируя на SSD, Станислав Николов...
 
Tempesta FW: challenges, internals, use cases / Александр Крижановский (Tempe...
Tempesta FW: challenges, internals, use cases / Александр Крижановский (Tempe...Tempesta FW: challenges, internals, use cases / Александр Крижановский (Tempe...
Tempesta FW: challenges, internals, use cases / Александр Крижановский (Tempe...
 
Aлександр Зайцев, LifeStreet
Aлександр Зайцев, LifeStreetAлександр Зайцев, LifeStreet
Aлександр Зайцев, LifeStreet
 
Hosting for forbes.ru_
Hosting for forbes.ru_Hosting for forbes.ru_
Hosting for forbes.ru_
 
Devconf2013 new-features-in-mysql-and-mariadb
Devconf2013 new-features-in-mysql-and-mariadbDevconf2013 new-features-in-mysql-and-mariadb
Devconf2013 new-features-in-mysql-and-mariadb
 
Как устроена MySQL-репликация, Андрей Аксенов (Sphinx)
Как устроена MySQL-репликация, Андрей Аксенов (Sphinx)Как устроена MySQL-репликация, Андрей Аксенов (Sphinx)
Как устроена MySQL-репликация, Андрей Аксенов (Sphinx)
 
Современная операционная система: что надо знать разработчику / Александр Кри...
Современная операционная система: что надо знать разработчику / Александр Кри...Современная операционная система: что надо знать разработчику / Александр Кри...
Современная операционная система: что надо знать разработчику / Александр Кри...
 

High Load

  • 2. • Мотивация • Тех. Показатели • Устройство • Как попробовать • Особенности
  • 3. • Мотивация • Тех. Показатели • Устройство • Как попробовать • Особенности
  • 4. *MySQL is a registered trademark of Oracle Corporation
  • 6. Размер базы (GB) (Linkbench) 1172 574 InnoDB RocksDB
  • 8. Размер базы (GB) (Prod) (zlib level1 compression) 1089 525.4 InnoDB RockDB
  • 9. Terabytes written (Prod) 0 4 8 12 InnoDB 2x RocksDB Flash GC Binlog / Relay log Storage engine
  • 10. Flash read rates (Prod) • RocksDB > InnoDB * 1.5 • Flash справляется! Time RocksDB (2x) InnoDB => 37 Tb => 12 Tb
  • 11. Cumulative Response Times (Prod) 0 50 100 150 200 250 300 < 15ms < 75ms < 250ms < 1000ms Kilo-Queries RocksDB x2 InnoDB
  • 12. CPU Idle (Prod) Time InnoDB 2x RocksDB 100% 0% 80% 50-60%
  • 13. • Мотивация • Тех. Показатели • Устройство • Как попробовать • Особенности
  • 14. Ограниченность InnoDB • B*-treе • Страничное хранение – Изменение = запись страницы – Сжатие тоже постраничное amplification = Размер на диске Размер данных • Read amplification – устраивает • Write amplification – проблема • Size amplification – проблема. 1 10 20 1 3 5 10 12 17 20 25 12
  • 15. Log-Structured Merge (LSM) MemTableЗапись Log SST • Пишем в MemTable+Log • MemTable → Sorted String Table MemTable
  • 16. Log-Structured Merge (LSM) MemTableЗапись Log SST • Пишем в MemTable+Log • MemTable → Sorted String Table – Линейная запись – Плотно, с компрессией. MemTable
  • 17. Log-Structured Merge (LSM) MemTableЗапись Log SST • Пишем в MemTable+Log • MemTable → Sorted String Table MemTable
  • 18. Log-Structured Merge (LSM) MemTableЗапись Log SST • Пишем в MemTable+Log • MemTable → Sorted String Table • MemTable #2 → Sorted String Table #2 • ... SST . . .
  • 19. Чтение данных в LSM MemTable Чтение Log SST SST . . . • Чтение = слияние данных • Read amplification ↑↑  SST
  • 20. Compaction – слияние SST SST SST . . .Цели • Уменьшение числа SST-файлов скорость чтения ↑ • Удаление старых версий записей размер ↓ SST SST Метод • Слияние сортированных файлов – Пишем последовательно – Пишем плотно – Хорошее сжатие.
  • 21. Как делать compaction • Избегать крайностей – Редко: слишком много SST – Часто: большой write amplification • Работать эффективно – Сливать файлы похожих размеров – Сливать файлы с разными версиями одной записи • Есть много алгоритмов – Size-tiered – Leveled – Date-tiered – FIFO
  • 22. a-b c-g f-k l-q za-b a-b Leveled compaction a-c a-f . . . . . . . . . . . . b-gL0 L1 a-e f-i j-n o-z L2 h-k o-r s-w L5 MemTable x-z N*5 mb 50 mb 500 mba-c e-g l-n g-h n-q t-u x-yd-e j-ka-b
  • 23. a-ba-b c-g f-k l-q za-b Leveled compaction a-c a-f . . . . . . . . . . . . b-gL0 L1 a-e f-i j-n o-z L2 h-k o-r s-w L5 MemTable x-z N*5 mb 50 mb 500 mba-c e-g l-n g-h n-q t-u x-yd-e j-ka-b MemTable read(key) 5 + #L0 операций
  • 24. a-b c-g f-k l-q za-b a-b Leveled compaction a-c a-f . . . . . . . . . . . . b-gL0 L1 a-e f-i j-n o-z L2 h-k o-r s-w L5 MemTable x-z N*5 mb 50 mb 500 mba-c e-g l-n g-h n-q t-u x-yd-e j-ka-b
  • 25. a-b c-g f-k l-q za-b a-b Leveled compaction a-c a-f . . . . . . . . . . . . b-gL0 L1 a-e f-i j-n o-z L2 h-k o-r s-w L5 MemTable x-z N*5 mb 50 mb 500 mba-c e-g l-n g-h n-q t-u x-yd-e j-ka-b
  • 26. a-b c-g f-k l-q za-b a-b Leveled compaction a-c a-f . . . . . . . . . . . . b-gL0 L1 a-e f-i j-n o-z L2 h-k o-r s-w L5 MemTable x-z N*5 mb 50 mb 500 mba-c e-g l-n g-h n-q t-u x-yd-e j-ka-b
  • 27. Leveled compaction - выводы • read amp. <= #L0+5 • Новые изменения сливаются друг с другом • write amp. <= 5*level_fanout +1 • size amp. ~ 1.11 • И мигрируют в старые уровни.
  • 28. Log-Structured Merge – выводы • Уменьшает write amplification меньше операций записи • Уменьшает size amplification размер БД на диске меньше • Увеличивает read amplification читаем из нескольких SST.
  • 29. LevelDB – реализация LSM + Встраиваемая библиотека на С++ + Key/value store на LSM + Level-ed compaction + Разработана в Google для Chrome + Open Source – Не для серверных нагрузок.
  • 30. • Форкнули LevelDB • Добавили – Multi-threaded Compaction – Multi-threaded MemTable flush – Throttling, если compaction не успевает – Prefix bloom filter для range scans – Column Families – И т д. http://rocksdb.org
  • 31. • Facebook • LinkedIn • Yahoo • CockroachDB • DNANexus • … Применение
  • 32. Ограничения RocksDB • Это key/value store – Put(key, value), Delete(key) – Write(WriteBatch) • Нет – Отдельных таблиц – Типов данных – Вторичных индексов – ...
  • 33. create table tbl ( pk int primary key, ... ) engine=RocksDB; MySQL* + MyRocks= • Табличный движок для MySQL • Данные хранятся в RocksDB • Конфигурация и диагностика RocksDB через MySQL.
  • 34. MyRocks готов к тестам • SQL-семантика • Транзакционный – REPEATABLE READ – READ COMMITTED • Поддержка всех типов данных • Поддержка индексов – PRIMARY/UNIQUE/Secondary – Поиск по всем видам условий – Статистика для оптимизатора • Можно пробовать приложения
  • 35. • Мотивация • Тех. Показатели • Устройство • Как попробовать • Особенности
  • 36. Как попробовать • https://github.com/facebook/mysql-5.6/ • В будущем - в MariaDB (?) • Присылайте вопросы, баги, отзывы, идеи, патчи • Обсуждение – https://github.com/facebook/mysql- 5.6/issues/ – http://facebook.com/groups/rocksdb-dev
  • 37. Настройки LSM MemTable Level 0 Level 1 Level 2 Level 3 File File File File File File File File File File File File File File LOG (WAL) Compaction Flush show engine rocksdb status; https://github.com/facebook/rocksdb/wiki/RocksDB-Tuning-Guide
  • 38. Настройки MyRocks set global rocksdb_default_cf_options ='write_buffer_size=12m;target_file_siz e_base=1m;max_bytes_for_level_multiplie r=10' • Настройка default column family • Другие column families • > 84 rocksdb_* переменных set global rocksdb_override_cf_options
  • 39. • Мотивация • Тех. Показатели • Устройство • Как попробовать • Особенности
  • 40. Особенности SQL на LSM • myrockshotbackup • Сканирование в обратную сторону. • Bloom filters для range scans • Tombstones после массового DELETE
  • 41. myrockshotbackup • Local server: set rocksdb_create_checkpoint= '/data/mysql/backup' myrockshotbackup | ssh "tar zxf-" • Remote: myrockshotbackup –-move_back • Create checkpoint
  • 42. Сканирование в обратную сторону • Проблема – Большой размер блока – Компрессия – Читать с конца нельзя • Решение: Column Family c хранением данных в обратном порядке select * from user_messages where user_id=1234 order by date desc limit 10 create table user_messages ( ... KEY key1(user_id,date) comment 'rev:cf_name'
  • 43. Bloom filters для range scans • Читаем из многих источников • tbl.key=c1 • Во многих SST ключа с1 нет • Bloom Filter в каждой SST. MemTable Чтение SST SST SST
  • 44. Bloom filters для range scans MemTable Чтение SST SST SST INDEX ON t1(col1, col2, …) index_nr col1 col2 … • tbl.key BETWEEN 10 AND 20 • Надо проверять все SST • И Bloom Filter не применим  • Bloom filter на префикс:
  • 45. Tombstones после DELETE • DELETE создает tombstones delete from messages where date='2015-11-01' select * from messages where date>='2015-11-01' • Решение – Детектировать это при записи в SST – Немедленно назначать compaction. • При чтении их пропускают
  • 46. В MyRocks нет всех фич • PRIMARY KEY обязателен • ‘index only’ не для всех типов данных • ALTER TABLE медленный • Размер транзакции ограничен • Нет crash-safe master (пользуемся semi-sync) • ...
  • 47. Выводы • Табличный движок MyRocks основан на RocksDB • Приносит LSM серверного уровня в MySQL • Решает проблемы write-heavy загрузки – Меньше места на диске – Меньше операций записи (износ SSD) – «В 2 раза меньше InnoDB по тому и другому, без замедления чтения» • Состояние – Интенсивная разработка (не все сценарии покрыты) – Но пробовать уже можно – Open Source: приглашаем к сотрудничеству.
  • 48. Ссылки • RocksDB Storage Engine for MySQL and MongoDB, Igor Canadi https://www.percona.com/live/europe-amsterdam- 2015/sessions/rocksdb-storage-engine-mysql-and- mongodb • MySQL on RocksDB (MyRocks), Herman Lee https://www.percona.com/live/europe-amsterdam- 2015/sessions/mysql-rocksdb-myrocks
  • 50. + MySQL = MyRocks

Editor's Notes

  1. Spinning disks – проблема – ограничение числи операций чтения Flash – отлично решает эту проблема . За те же деньги 80x. В чем проигрывает – на TLC flash – 5x less, MLC - 25x less. MLC – 10,000 write cycles TLC – 1,000 write cycles
  2. (zlib level1 compression)
  3. Important for extending flash duration Two equal instances of RocksDB
  4. Slow query log to capture query times
  5. Blue for InnoDB, Orange for MyRocks. Running at full storage capacity and using all available memory for buffer/cache pools. InnoDB around 80% cpu idle. 2xRocksDB around 50% to 60%
  6. Можно настроить практически все! Размер мемсторе, количество таблиц, размер 0-ого уровня. Размер 1-ого уровня, размер каждого уровня, компрессиию на каждом уровне, размер файлов или количество файлов, количество нитей комрессии, Если менять код – алгоритмы мемсторе, формат данных на диске, интерфейсы с ОС (pfile, mmap, HDFS, etc…), тип кеша Рекомендуемые настройки – дефолтные настройки плохие Цель настроек. Компакция идет всегда. Нужно чтобы не было затыков. Скорость компакции – компромис между read and write amplification 5-6 уровней, разница между уровнями 10-x Включить компрессию на высоких уровнях, но не включать на низких Использовать одну нить для флаш и столько нитей для compaction, сколько CPU