Движок LMDB — особенный чемпион / Юрьев Леонид (Петер-Сервис R&D)
MyRocks Табличный Движок для MySQL / Алексей Майков (Facebook) /...
-
Upload
ontico -
Category
Engineering
-
view
1.032 -
download
3
Transcript of MyRocks Табличный Движок для MySQL / Алексей Майков (Facebook) /...
![Page 1: MyRocks Табличный Движок для MySQL / Алексей Майков (Facebook) / Сергей Петруня (MariaDB Corporation Ab)](https://reader033.fdocument.pub/reader033/viewer/2022052405/586f91061a28ab54768b7add/html5/thumbnails/1.jpg)
MyRocks: Табличный Движок для MySQLАлексей МайковСергей Петруня
![Page 2: MyRocks Табличный Движок для MySQL / Алексей Майков (Facebook) / Сергей Петруня (MariaDB Corporation Ab)](https://reader033.fdocument.pub/reader033/viewer/2022052405/586f91061a28ab54768b7add/html5/thumbnails/2.jpg)
• Мотивация• Тех. Показатели• Устройство• Как попробовать• Особенности
![Page 3: MyRocks Табличный Движок для MySQL / Алексей Майков (Facebook) / Сергей Петруня (MariaDB Corporation Ab)](https://reader033.fdocument.pub/reader033/viewer/2022052405/586f91061a28ab54768b7add/html5/thumbnails/3.jpg)
• Мотивация• Тех. Показатели• Устройство• Как попробовать• Особенности
![Page 4: MyRocks Табличный Движок для MySQL / Алексей Майков (Facebook) / Сергей Петруня (MariaDB Corporation Ab)](https://reader033.fdocument.pub/reader033/viewer/2022052405/586f91061a28ab54768b7add/html5/thumbnails/4.jpg)
*MySQL is a registered trademark of Oracle Corporation
![Page 5: MyRocks Табличный Движок для MySQL / Алексей Майков (Facebook) / Сергей Петруня (MariaDB Corporation Ab)](https://reader033.fdocument.pub/reader033/viewer/2022052405/586f91061a28ab54768b7add/html5/thumbnails/5.jpg)
MyRocks
![Page 6: MyRocks Табличный Движок для MySQL / Алексей Майков (Facebook) / Сергей Петруня (MariaDB Corporation Ab)](https://reader033.fdocument.pub/reader033/viewer/2022052405/586f91061a28ab54768b7add/html5/thumbnails/6.jpg)
Размер базы (GB) (Linkbench)
InnoDB RocksDB
1172
574
![Page 7: MyRocks Табличный Движок для MySQL / Алексей Майков (Facebook) / Сергей Петруня (MariaDB Corporation Ab)](https://reader033.fdocument.pub/reader033/viewer/2022052405/586f91061a28ab54768b7add/html5/thumbnails/7.jpg)
Megabytes/s written (Linkbench)
InnoDB RocksDB
150
70
![Page 8: MyRocks Табличный Движок для MySQL / Алексей Майков (Facebook) / Сергей Петруня (MariaDB Corporation Ab)](https://reader033.fdocument.pub/reader033/viewer/2022052405/586f91061a28ab54768b7add/html5/thumbnails/8.jpg)
Размер базы (GB) (Prod)
(zlib level1 compression)
InnoDB RockDB
1089
525.4
![Page 9: MyRocks Табличный Движок для MySQL / Алексей Майков (Facebook) / Сергей Петруня (MariaDB Corporation Ab)](https://reader033.fdocument.pub/reader033/viewer/2022052405/586f91061a28ab54768b7add/html5/thumbnails/9.jpg)
Terabytes written (Prod)
InnoDB 2x RocksDB0
4
8
12
Flash GC
Binlog / Relay log
Storage engine
![Page 10: MyRocks Табличный Движок для MySQL / Алексей Майков (Facebook) / Сергей Петруня (MariaDB Corporation Ab)](https://reader033.fdocument.pub/reader033/viewer/2022052405/586f91061a28ab54768b7add/html5/thumbnails/10.jpg)
Flash read rates (Prod)• RocksDB > InnoDB * 1.5• Flash справляется!
Time
RocksDB (2x)
InnoDB
=> 37 Tb
=> 12 Tb
![Page 11: MyRocks Табличный Движок для MySQL / Алексей Майков (Facebook) / Сергей Петруня (MariaDB Corporation Ab)](https://reader033.fdocument.pub/reader033/viewer/2022052405/586f91061a28ab54768b7add/html5/thumbnails/11.jpg)
Cumulative Response Times (Prod)
< 15ms
< 25ms
< 50ms
< 75ms
< 100ms
< 150ms
< 250ms
< 500ms
< 750ms
< 1000ms
< 1500ms
< 2500ms0
50000
100000
150000
200000
250000
300000
Kilo
-Que
ries
RocksDB x2
InnoDB
![Page 12: MyRocks Табличный Движок для MySQL / Алексей Майков (Facebook) / Сергей Петруня (MariaDB Corporation Ab)](https://reader033.fdocument.pub/reader033/viewer/2022052405/586f91061a28ab54768b7add/html5/thumbnails/12.jpg)
CPU Idle (Prod)
Time
InnoDB
2x RocksDB
100%
0%
80%
50-60%
![Page 13: MyRocks Табличный Движок для MySQL / Алексей Майков (Facebook) / Сергей Петруня (MariaDB Corporation Ab)](https://reader033.fdocument.pub/reader033/viewer/2022052405/586f91061a28ab54768b7add/html5/thumbnails/13.jpg)
• Мотивация• Тех. Показатели• Устройство• Как попробовать• Особенности
![Page 14: MyRocks Табличный Движок для MySQL / Алексей Майков (Facebook) / Сергей Петруня (MariaDB Corporation Ab)](https://reader033.fdocument.pub/reader033/viewer/2022052405/586f91061a28ab54768b7add/html5/thumbnails/14.jpg)
Ограниченность InnoDB• B*-treе• Страничное хранение
– Изменение = запись страницы
– Сжатие тоже постраничное
amplification =Размер на дискеРазмер данных
• Read amplification – устраивает• Write amplification – проблема• Size amplification – проблема.
11020
135
101217
2025
12
![Page 15: MyRocks Табличный Движок для MySQL / Алексей Майков (Facebook) / Сергей Петруня (MariaDB Corporation Ab)](https://reader033.fdocument.pub/reader033/viewer/2022052405/586f91061a28ab54768b7add/html5/thumbnails/15.jpg)
Log-Structured Merge (LSM)
MemTableЗапись
Log SST
• Пишем в MemTable+Log• MemTable → Sorted String Table
MemTable
![Page 16: MyRocks Табличный Движок для MySQL / Алексей Майков (Facebook) / Сергей Петруня (MariaDB Corporation Ab)](https://reader033.fdocument.pub/reader033/viewer/2022052405/586f91061a28ab54768b7add/html5/thumbnails/16.jpg)
Log-Structured Merge (LSM)
MemTableЗапись
Log SST
• Пишем в MemTable+Log• MemTable → Sorted String Table
– Линейная запись– Плотно, с компрессией.
MemTable
![Page 17: MyRocks Табличный Движок для MySQL / Алексей Майков (Facebook) / Сергей Петруня (MariaDB Corporation Ab)](https://reader033.fdocument.pub/reader033/viewer/2022052405/586f91061a28ab54768b7add/html5/thumbnails/17.jpg)
Log-Structured Merge (LSM)
MemTableЗапись
Log SST
• Пишем в MemTable+Log• MemTable → Sorted String Table
MemTable
![Page 18: MyRocks Табличный Движок для MySQL / Алексей Майков (Facebook) / Сергей Петруня (MariaDB Corporation Ab)](https://reader033.fdocument.pub/reader033/viewer/2022052405/586f91061a28ab54768b7add/html5/thumbnails/18.jpg)
Log-Structured Merge (LSM)
MemTableЗапись
Log SST
• Пишем в MemTable+Log• MemTable → Sorted String Table• MemTable #2 → Sorted String Table #2• ...
SST . . .
![Page 19: MyRocks Табличный Движок для MySQL / Алексей Майков (Facebook) / Сергей Петруня (MariaDB Corporation Ab)](https://reader033.fdocument.pub/reader033/viewer/2022052405/586f91061a28ab54768b7add/html5/thumbnails/19.jpg)
Чтение данных в LSM
MemTable Чтение
Log SST SST . . .
• Чтение = слияние данных • Read amplification ↑↑
SST
![Page 20: MyRocks Табличный Движок для MySQL / Алексей Майков (Facebook) / Сергей Петруня (MariaDB Corporation Ab)](https://reader033.fdocument.pub/reader033/viewer/2022052405/586f91061a28ab54768b7add/html5/thumbnails/20.jpg)
Compaction – слияние SST
SST SST . . .Цели• Уменьшение числа
SST-файловскорость чтения ↑
• Удаление старых версий записей размер ↓
SST
SST
Метод• Слияние сортированных файлов
– Пишем последовательно– Пишем плотно– Хорошее сжатие.
![Page 21: MyRocks Табличный Движок для MySQL / Алексей Майков (Facebook) / Сергей Петруня (MariaDB Corporation Ab)](https://reader033.fdocument.pub/reader033/viewer/2022052405/586f91061a28ab54768b7add/html5/thumbnails/21.jpg)
Как делать compaction• Избегать крайностей
– Редко: слишком много SST– Часто: большой write amplification
• Работать эффективно– Сливать файлы похожих размеров– Сливать файлы с разными
версиями одной записи• Есть много алгоритмов
– Size-tiered– Leveled
– Date-tiered– FIFO
![Page 22: MyRocks Табличный Движок для MySQL / Алексей Майков (Facebook) / Сергей Петруня (MariaDB Corporation Ab)](https://reader033.fdocument.pub/reader033/viewer/2022052405/586f91061a28ab54768b7add/html5/thumbnails/22.jpg)
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
![Page 23: MyRocks Табличный Движок для MySQL / Алексей Майков (Facebook) / Сергей Петруня (MariaDB Corporation Ab)](https://reader033.fdocument.pub/reader033/viewer/2022052405/586f91061a28ab54768b7add/html5/thumbnails/23.jpg)
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
MemTableread(key)
5 + #L0 операций
![Page 24: MyRocks Табличный Движок для MySQL / Алексей Майков (Facebook) / Сергей Петруня (MariaDB Corporation Ab)](https://reader033.fdocument.pub/reader033/viewer/2022052405/586f91061a28ab54768b7add/html5/thumbnails/24.jpg)
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
![Page 25: MyRocks Табличный Движок для MySQL / Алексей Майков (Facebook) / Сергей Петруня (MariaDB Corporation Ab)](https://reader033.fdocument.pub/reader033/viewer/2022052405/586f91061a28ab54768b7add/html5/thumbnails/25.jpg)
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
![Page 26: MyRocks Табличный Движок для MySQL / Алексей Майков (Facebook) / Сергей Петруня (MariaDB Corporation Ab)](https://reader033.fdocument.pub/reader033/viewer/2022052405/586f91061a28ab54768b7add/html5/thumbnails/26.jpg)
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
![Page 27: MyRocks Табличный Движок для MySQL / Алексей Майков (Facebook) / Сергей Петруня (MariaDB Corporation Ab)](https://reader033.fdocument.pub/reader033/viewer/2022052405/586f91061a28ab54768b7add/html5/thumbnails/27.jpg)
Leveled compaction - выводы• read amp. <=
#L0+5
• Новые изменения сливаются друг с другом
• write amp. <= 5*level_fanout +1
• size amp. ~ 1.11
• И мигрируют в старые уровни.
![Page 28: MyRocks Табличный Движок для MySQL / Алексей Майков (Facebook) / Сергей Петруня (MariaDB Corporation Ab)](https://reader033.fdocument.pub/reader033/viewer/2022052405/586f91061a28ab54768b7add/html5/thumbnails/28.jpg)
Log-Structured Merge – выводы • Уменьшает write
amplificationменьше операций записи
• Уменьшает size amplificationразмер БД на диске меньше
• Увеличивает read amplificationчитаем из нескольких SST.
![Page 29: MyRocks Табличный Движок для MySQL / Алексей Майков (Facebook) / Сергей Петруня (MariaDB Corporation Ab)](https://reader033.fdocument.pub/reader033/viewer/2022052405/586f91061a28ab54768b7add/html5/thumbnails/29.jpg)
LevelDB – реализация LSM+ Встраиваемая библиотека на С+
++ Key/value store на LSM+ Level-ed compaction+ Open Source+ Разработана в Google для
Chrome– Не для серверных нагрузок.
![Page 30: MyRocks Табличный Движок для MySQL / Алексей Майков (Facebook) / Сергей Петруня (MariaDB Corporation Ab)](https://reader033.fdocument.pub/reader033/viewer/2022052405/586f91061a28ab54768b7add/html5/thumbnails/30.jpg)
• Форкнули LevelDB• Добавили
– Multi-threaded Compaction– Multi-threaded MemTable flush– Throttling, если compaction не
успевает– Prefix bloom filter для range scans– Column Families– И т д.
http://rocksdb.org
![Page 31: MyRocks Табличный Движок для MySQL / Алексей Майков (Facebook) / Сергей Петруня (MariaDB Corporation Ab)](https://reader033.fdocument.pub/reader033/viewer/2022052405/586f91061a28ab54768b7add/html5/thumbnails/31.jpg)
• Facebook• LinkedIn• Yahoo• CockroachDB• DNANexus• …
Применение
![Page 32: MyRocks Табличный Движок для MySQL / Алексей Майков (Facebook) / Сергей Петруня (MariaDB Corporation Ab)](https://reader033.fdocument.pub/reader033/viewer/2022052405/586f91061a28ab54768b7add/html5/thumbnails/32.jpg)
Ограничения RocksDB• Это key/value store
– Put(key, value), Delete(key)– Write(WriteBatch)
• Нет– Отдельных таблиц– Типов данных– Вторичных индексов– ...
![Page 33: MyRocks Табличный Движок для MySQL / Алексей Майков (Facebook) / Сергей Петруня (MariaDB Corporation Ab)](https://reader033.fdocument.pub/reader033/viewer/2022052405/586f91061a28ab54768b7add/html5/thumbnails/33.jpg)
create table tbl ( pk int primary key, ...) engine=RocksDB;
MySQL* + MyRocks=
• Табличный движок для MySQL
• Данные хранятся в RocksDB• Конфигурация и диагностика
RocksDB через MySQL.
![Page 34: MyRocks Табличный Движок для MySQL / Алексей Майков (Facebook) / Сергей Петруня (MariaDB Corporation Ab)](https://reader033.fdocument.pub/reader033/viewer/2022052405/586f91061a28ab54768b7add/html5/thumbnails/34.jpg)
MyRocks готов к тестам• SQL-семантика• Транзакционный
– REPEATABLE READ– READ COMMITTED
• Поддержка всех типов данных• Поддержка индексов
– PRIMARY/UNIQUE/Secondary– Поиск по всем видам условий– Статистика для оптимизатора
• Можно пробовать приложения
![Page 35: MyRocks Табличный Движок для MySQL / Алексей Майков (Facebook) / Сергей Петруня (MariaDB Corporation Ab)](https://reader033.fdocument.pub/reader033/viewer/2022052405/586f91061a28ab54768b7add/html5/thumbnails/35.jpg)
• Мотивация• Тех. Показатели• Устройство• Как попробовать• Особенности
![Page 36: MyRocks Табличный Движок для MySQL / Алексей Майков (Facebook) / Сергей Петруня (MariaDB Corporation Ab)](https://reader033.fdocument.pub/reader033/viewer/2022052405/586f91061a28ab54768b7add/html5/thumbnails/36.jpg)
Как попробовать• https
://github.com/facebook/mysql-5.6/• В будущем - в MariaDB (?)• Присылайте вопросы, баги,
отзывы, идеи, патчи• Обсуждение
– https://github.com/facebook/mysql-5.6/issues/
– http://facebook.com/groups/rocksdb-dev
![Page 37: MyRocks Табличный Движок для MySQL / Алексей Майков (Facebook) / Сергей Петруня (MariaDB Corporation Ab)](https://reader033.fdocument.pub/reader033/viewer/2022052405/586f91061a28ab54768b7add/html5/thumbnails/37.jpg)
Настройки 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
![Page 38: MyRocks Табличный Движок для MySQL / Алексей Майков (Facebook) / Сергей Петруня (MariaDB Corporation Ab)](https://reader033.fdocument.pub/reader033/viewer/2022052405/586f91061a28ab54768b7add/html5/thumbnails/38.jpg)
Настройки MyRocks
set global rocksdb_default_cf_options ='write_buffer_size=12m;target_file_size_base=1m;max_bytes_for_level_multiplier=10'
• Настройка default column family
• Другие column families
• > 84 rocksdb_* переменных
set global rocksdb_override_cf_options
![Page 39: MyRocks Табличный Движок для MySQL / Алексей Майков (Facebook) / Сергей Петруня (MariaDB Corporation Ab)](https://reader033.fdocument.pub/reader033/viewer/2022052405/586f91061a28ab54768b7add/html5/thumbnails/39.jpg)
• Мотивация• Тех. Показатели• Устройство• Как попробовать• Особенности
![Page 40: MyRocks Табличный Движок для MySQL / Алексей Майков (Facebook) / Сергей Петруня (MariaDB Corporation Ab)](https://reader033.fdocument.pub/reader033/viewer/2022052405/586f91061a28ab54768b7add/html5/thumbnails/40.jpg)
Особенности SQL на LSM
• myrockshotbackup• Сканирование в
обратную сторону.• Bloom filters для range
scans• Tombstones после
массового DELETE
![Page 41: MyRocks Табличный Движок для MySQL / Алексей Майков (Facebook) / Сергей Петруня (MariaDB Corporation Ab)](https://reader033.fdocument.pub/reader033/viewer/2022052405/586f91061a28ab54768b7add/html5/thumbnails/41.jpg)
myrockshotbackup
• Local server:
set rocksdb_create_checkpoint= '/data/mysql/backup'
myrockshotbackup | ssh "tar zxf-"
• Remote: myrockshotbackup –-move_back
• Create checkpoint
![Page 42: MyRocks Табличный Движок для MySQL / Алексей Майков (Facebook) / Сергей Петруня (MariaDB Corporation Ab)](https://reader033.fdocument.pub/reader033/viewer/2022052405/586f91061a28ab54768b7add/html5/thumbnails/42.jpg)
Сканирование в обратную сторону
• Проблема– Большой размер блока– Компрессия– Читать с конца нельзя
• Решение: Column Family c хранением данных в обратном порядке
select * from user_messages where user_id=1234order by date desc limit 10
create table user_messages ( ... KEY key1(user_id,date) comment 'rev:cf_name'
![Page 43: MyRocks Табличный Движок для MySQL / Алексей Майков (Facebook) / Сергей Петруня (MariaDB Corporation Ab)](https://reader033.fdocument.pub/reader033/viewer/2022052405/586f91061a28ab54768b7add/html5/thumbnails/43.jpg)
Bloom filters для range scans• Читаем из многих источников• tbl.key=c1• Во многих SST
ключа с1 нет• Bloom Filter в
каждой SST.
MemTable Чтение
SST SST SST
![Page 44: MyRocks Табличный Движок для MySQL / Алексей Майков (Facebook) / Сергей Петруня (MariaDB Corporation Ab)](https://reader033.fdocument.pub/reader033/viewer/2022052405/586f91061a28ab54768b7add/html5/thumbnails/44.jpg)
Bloom filters для range scans
MemTable Чтение
SST SST SST
INDEX ON t1(col1, col2, …)index_nr col1 col2 …
• tbl.key>10 AND tbl.key<20• Надо проверять
все SST• И Bloom Filter
не применим • Bloom filter на
префикс:
![Page 45: MyRocks Табличный Движок для MySQL / Алексей Майков (Facebook) / Сергей Петруня (MariaDB Corporation Ab)](https://reader033.fdocument.pub/reader033/viewer/2022052405/586f91061a28ab54768b7add/html5/thumbnails/45.jpg)
Tombstones после DELETE• DELETE создает tombstones
delete from messages where date='2015-11-01'
select * from messages where date>='2015-11-01'
• Решение– Детектировать это при записи в
SST– Немедленно назначать
compaction.
• При чтении их пропускают
![Page 46: MyRocks Табличный Движок для MySQL / Алексей Майков (Facebook) / Сергей Петруня (MariaDB Corporation Ab)](https://reader033.fdocument.pub/reader033/viewer/2022052405/586f91061a28ab54768b7add/html5/thumbnails/46.jpg)
В MyRocks нет всех фич• Ограничения
– PRIMARY KEY обязателен– ‘index only’ не для всех типов данных– ALTER TABLE медленный– Размер транзакции ограничен– Нет crash-safe master
(пользуемся semi-sync)• Это временно
– Дайте нам знать, что нужно в первую очередь.
![Page 47: MyRocks Табличный Движок для MySQL / Алексей Майков (Facebook) / Сергей Петруня (MariaDB Corporation Ab)](https://reader033.fdocument.pub/reader033/viewer/2022052405/586f91061a28ab54768b7add/html5/thumbnails/47.jpg)
Выводы• Табличный движок MyRocks основан на
RocksDB• Приносит LSM серверного уровня в MySQL• Решает проблемы write-heavy загрузки
– Меньше места на диске– Меньше операций записи (износ SSD) – «В 2 раза меньше InnoDB по тому и другому,
без замедления чтения»• Состояние
– Интенсивная разработка (не все сценарии покрыты)
– Но пробовать уже можно– Open Source: приглашаем к сотрудничеству.
![Page 48: MyRocks Табличный Движок для MySQL / Алексей Майков (Facebook) / Сергей Петруня (MariaDB Corporation Ab)](https://reader033.fdocument.pub/reader033/viewer/2022052405/586f91061a28ab54768b7add/html5/thumbnails/48.jpg)
Ссылки• 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
![Page 49: MyRocks Табличный Движок для MySQL / Алексей Майков (Facebook) / Сергей Петруня (MariaDB Corporation Ab)](https://reader033.fdocument.pub/reader033/viewer/2022052405/586f91061a28ab54768b7add/html5/thumbnails/49.jpg)
MyRocks
+ MySQL
![Page 50: MyRocks Табличный Движок для MySQL / Алексей Майков (Facebook) / Сергей Петруня (MariaDB Corporation Ab)](https://reader033.fdocument.pub/reader033/viewer/2022052405/586f91061a28ab54768b7add/html5/thumbnails/50.jpg)
+ MySQL = MyRocks