SlideShare a Scribd company logo
Производительность MySQL:
чтонового?
Алексей Копытов
Производительность MySQL: что нового?
Алексей Копытов
О чём доклад?
обзор изменений производительности за ~2 года
альтернативы InnoDB (MyRocks, TokuDB)
текущие проблемы
MySQL 5.7!
GA версия выпущена 19 октября 2015г.
качественный релиз
огромное количество новый функций и улучшений производительности
обзорный доклад по всем новым возможностям от Дмитрия Ленёва сегодня
Скорость соединения
создание нового соединения стало быстрее
особенно когда много клиентов
sysbench connect:
Производительность на read-only нагрузках
sysbench OLTP POINT_SELECT , 72 ядра (4x18-ядерных Intel Xeon E7-58800 v3):
работа по оптимизации началась ещё в 5.6
дальнейшие улучшения масштабируемости в 5.7:
1.6 миллиона key/value запросов в секунду
1.8 миллиона, если использовать prepared statements
нет записи в базу (не назначается и не записывается TRX_ID )
оптимизации в MDL коде для DML запросов засчёт более дорогих DDL блокировок
устранение THR_LOCK блокировок для InnoDB таблиц
Производительность на read-only нагрузках
Read-only транзакции больше не нужно явно помечать:
в MySQL 5.6 требуется явное указание не-AUTOCOMMIT транзакций
START TRANSACTION READ ONLY
SELECT ...;
SELECT ...;
COMMIT;
SQL
в MySQL 5.7 транзакции считаются read-only по умолчанию.
START TRANSACTION;
SELECT ...;
SELECT ...;
COMMIT;
SQL
Производительность на read-only нагрузках
sysbench OLTP RO, 72 ядра (4x18-ядерных Intel Xeon E7-58800 v3):
1M запросов (~70K OLTP_RO транзакций) в секунду
Производительность на read-only нагрузках
Обычный Adaptive Hash Index:
Cекционированный Adaptive Hash Index
использует хэш для поиска по "популярным" значениям B-Tree ключей
хэш при частых обновлениях становится узким местом
обновления возможны даже при read-only нагрузке!
секционируем по index_id
реализовано в XtraDB (<= 2009г.)
аналогичная опция в MySQL 5.7 ( innodb_adaptive_hash_index_parts [=8])
Производительность на read-only нагрузках
Оставшиеся проблемы с масштабируемостью:
Adaptive Hash Index
блокировки страниц в buffer pool (block lock)
bug #74954 "Inefficient InnoDB row stats implementation" и bug #79455 "Restore
get_sched_indexer_t in 5.7"
на IO-bound read-only нагрузках: fil_system->mutex
секционирование по index_id – не самый лучший вариант
обещают полностью переписать в MySQL 8
мьютексы были переписаны в 5.7
rwlock-и плохо масштабируются, обещают переписать в MySQL 8
cчётчики считанных/изменённых записей плохо масштабируются на
многоядерных архитектурах
Производительность на read-write нагрузках
убрали index lock:
меньше блокировок на log_sys->mutex
сброс страниц на диск (flushing)
блокировка на весь индекс, когда нужно изменить структуру дерева
в 5.7 блокировка только при конфликтующих изменениях
в основном для innodb_flush_log_at_trx_commit=2
несколько параллельных потоков ( innodb_page_cleaners=4 )
оптимизации в адаптивном алгоритме
Производительность на read-write нагрузках
Временные InnoDB таблицы в 5.7:
используются вместо MyISAM по умолчанию оптимизатором для внутренних
таблиц
не генерируют записей в транзакционный журнал
отдельное табличное пространство ibtmp1 – пересоздаётся при старте
"ослабленный" MVCC
не используют doublewrite buffer
быстрее MyISAM в большинстве случаев
Производительность на read-write нагрузках
Проблемы:
проблемы с масштабируемостью из-за неуспеващего флашинга
doublewrite в качестве «узкого места»
innodb_log_write_ahead_size увеличивает write amplification при
innodb_flush_log_at_trx_commit=1
Производительность на read-write нагрузках
Percona Server:
отдельные потоки для LRU flushing
параллельный doublewrite buffer:
Производительность на read-write нагрузках
много улучшений
но есть куда стремиться
работа кипит :)
Новые системные переменные
innodb_buffer_pool_size теперь динамическая переменная
innodb_buffer_pool_dump_pct=25
innodb_fill_factor=100 (для sorted index build)
innodb_log_write_ahead_size=8192
innodb_numa_interleave=off
innodb_page_cleaners=1
Изменения в значениях по умолчанию
Системные переменные с новыми значениями по умолчанию в 5.7:
binlog_format=row
sync_binlog=1
ssl=1
innodb_buffer_pool_dump_at_shutdown=on и
innodb_buffer_pool_load_at_startup=on
innodb_checksum_algorithm=crc32
innodb_log_buffer_size=16M
innodb_purge_threads=4
table_open_cache_instances=16
MyRocks и TokuDB
MyRocks
движок хранения от Facebook на основе RocksDB (форк LevelDB от Google)
LSM-деревья, оптимизирован на запись
9 миллиардов запросов/сек в Facebook
низкий write amplification (SSD!)
высокая компрессия (SSD!)
MyRocks
Источник: Mark Callaghan, MyRocks, MongoRocks & RocksDB
MyRocks
Источник: Mark Callaghan, MyRocks, MongoRocks & RocksDB
Ограничения MyRocks
нет поддержки многих возможностей InnoDB
только бинарные правила сортировки (collations)
нет в MariaDB/Percona
стабильность уровня "можно пробовать"
секционирование
online DDL
transportable tablespaces
внешние ключи
геометрические/полнотекстовые индексы
виртуальные колонки
TokuDB
разработка с 2007г.
"фрактальные" деревья
на самом деле B-Tree с расширениями
разрабатывается в Percona с 2015г.
TokuDB
Фрактальные деревья:
накапливание отложенных изменений в корневых узлах индексов ипроталкивание
к листьям по мере заполнения
TokuDB
Сильные стороны:
быстрее InnoDB при большом количестве индексов
несколько кластеризованных индексов
интенсивные нагрузки на запись, когда dataset > RAM
экономия места на диске за счёт продвинутой компрессии (SSD!)
read-free репликация
Ограничения TokuDB
Нет поддержки многих возможностей InnoDB:
проблема с чекпойнтами и стабильностью времени отклика (источник: percona.com/blog)
секционирование
online DDL
transportable tablespaces
внешние ключи
геометрические/полнотекстовые индексы
виртуальные колонки
уникальные индексы – медленно
SELECT -ы дорогие
низкие темпы разработки
Текущие проблемы и будущие версии
MySQL
Однопоточная производительность
каждый мажорный релиз MySQL на ~5% медленее предыдущего (но
лучшемасштабируется)
серия публикаций от Mark Callaghan и Петра Зайцева
Однопоточная производительность
Почему это важно:
производительность в 1 соединение == время отклика
параллельность репликации ограничена
административные задачи – как правило один поток
в большинстве случаев сервер работает с небольшим количеством соединений
Однопоточная производительность
Почему это сложно:
от версии к версии кода больше
больше ветвелений, кэш-промахов и т. д.
дробление блокировок ведёт к лучше масштабируемости, но болеемедленной
однопоточной работе
нет "низковисящих фруктов"
Однопоточная производительность
Почему это до сих пор проблема:
MariaDB работали в этом направлении, но о результатах ничего неизвестно
не приоритет для разработчиков
нужно помочь приоритизировать
не стесняйтесь сообщать на http://bugs.mysql.com/, если для вас это тоже проблема
Умная поддержка NUMA
Предыстория вопроса:
Twitter/Percona/MariaDB, 2012:
Jeremy Cole, 2010:
The MySQL “swap insanity” problem and the effects of the NUMA architecture
сбросить FS cache
включить чередование страниц
обеспечить инициализацию страниц памяти при старта, а не в процессе
работы
чередование страниц buffer pool + равномерное распределение между нодами
numa_interleave
innodb_buffer_pool_populate
flush_caches
Умная поддержка NUMA
Oracle MySQL, 2015:
innodb_numa_interleave – только частичное решение проблемы
опция flush_caches оставлена в Percona Server 5.7
Умная поддержка NUMA
проблема с NUMA не только в излишнем использовании swap.
NUMA cache line contention:
многие структуры данных не используют чередование:
bug #79358: No NUMA interleaving for some shared structures
"горячие" структуры данных в основном в одной NUMA ноде
блокировки вызывают значительный трафик между нодами
внутренний словарь данных в InnoDB
кэш табличных пространств
буфер транзакционного журнала
и т.д.
Умный параллельный purge
purge не справляется на нагрузках с очень интенсивной записью
несколько purge потоков соревнуются за один и тот же индекс
нужно более "интеллектуальное" распределение задач между потоками
https://bugs.mysql.com/81368
экспериментальный патч в Percona ~ 2013г.
скорее всего полный редизайн в MySQL 8
Спасибо! Вопросы?

More Related Content

PDF
"Новые возможности MySQL 5.7"
PDF
Эффективная отладка репликации MySQL / Света Смирнова (Percona)
PPTX
Автоматизация тестирования клиентской производительности / Николай Лавлинский...
PPTX
LuaJIT как основа для сервера приложений - проблемы и решения / Игорь Эрлих (...
PPTX
Оптимизация высоконагруженных ASP.NET приложений, работающих с MS SQL Server ...
PDF
Олег Бартунов и Иван Панченко
PPTX
Пайплайн машинного обучения на Apache Spark / Павел Клеменков (Rambler&Co)
PDF
Конструктор / Денис Паясь (Яндекс)
"Новые возможности MySQL 5.7"
Эффективная отладка репликации MySQL / Света Смирнова (Percona)
Автоматизация тестирования клиентской производительности / Николай Лавлинский...
LuaJIT как основа для сервера приложений - проблемы и решения / Игорь Эрлих (...
Оптимизация высоконагруженных ASP.NET приложений, работающих с MS SQL Server ...
Олег Бартунов и Иван Панченко
Пайплайн машинного обучения на Apache Spark / Павел Клеменков (Rambler&Co)
Конструктор / Денис Паясь (Яндекс)

What's hot (20)

PPTX
Настройка и оптимизация высоконагруженных J2EE веб-приложений / Шамим Ахмед (...
PDF
Что нового в MySQL 8.0? / Дмитрий Ленев (Oracle)
PPTX
обзор архитектуры и подсистем деплоя и мониторинга
PDF
Что нового и полезного в PostgreSQL 9.5 / Илья Космодемьянский (PostgreSQL-Co...
PPTX
Мониторинг в высоконагруженных (и не только) проектах: сравнительный анализ с...
PDF
Как сделать ваш JavaScript быстрее / Роман Дворнов (Авито)
PDF
Константин Осипов
PDF
Андрей Ситник
PDF
Кластеры баз данных делаем сложные вещи просто / Андрей Тихонов (Avito)
PDF
В поисках идеальной сети, или зачем нужна еще одна SDN / Андрей Королев (Ионика)
PPTX
Дизайн REST API для высокопроизводительных систем / Александр Лебедев (Новые ...
PDF
JPHP - О проекте на простом языке
PDF
noBackend, или Как выжить в эпоху толстеющих клиентов / Самохвалов Николай
PDF
Как не положить тысячи серверов с помощью системы централизованного управлени...
PPTX
Стратегия и тактика улучшения производительности BSS систем оператора мобильн...
PDF
libfpta — обгоняя SQLite и Tarantool / Леонид Юрьев (Positive Technologies)
PDF
Новые технологии репликации данных в PostgreSQL / Александр Алексеев (Postgre...
PDF
Open Source SQL-базы данных вступили в эру миллионов запросов в секунду / Фед...
PDF
Быстрое прототипирование бэкенда игры с геолокацией на OpenResty, Redis и Doc...
PPTX
Пишем свою платформу для управления данными. Это очень просто / Суханов Васил...
Настройка и оптимизация высоконагруженных J2EE веб-приложений / Шамим Ахмед (...
Что нового в MySQL 8.0? / Дмитрий Ленев (Oracle)
обзор архитектуры и подсистем деплоя и мониторинга
Что нового и полезного в PostgreSQL 9.5 / Илья Космодемьянский (PostgreSQL-Co...
Мониторинг в высоконагруженных (и не только) проектах: сравнительный анализ с...
Как сделать ваш JavaScript быстрее / Роман Дворнов (Авито)
Константин Осипов
Андрей Ситник
Кластеры баз данных делаем сложные вещи просто / Андрей Тихонов (Avito)
В поисках идеальной сети, или зачем нужна еще одна SDN / Андрей Королев (Ионика)
Дизайн REST API для высокопроизводительных систем / Александр Лебедев (Новые ...
JPHP - О проекте на простом языке
noBackend, или Как выжить в эпоху толстеющих клиентов / Самохвалов Николай
Как не положить тысячи серверов с помощью системы централизованного управлени...
Стратегия и тактика улучшения производительности BSS систем оператора мобильн...
libfpta — обгоняя SQLite и Tarantool / Леонид Юрьев (Positive Technologies)
Новые технологии репликации данных в PostgreSQL / Александр Алексеев (Postgre...
Open Source SQL-базы данных вступили в эру миллионов запросов в секунду / Фед...
Быстрое прототипирование бэкенда игры с геолокацией на OpenResty, Redis и Doc...
Пишем свою платформу для управления данными. Это очень просто / Суханов Васил...
Ad

Viewers also liked (20)

PDF
"PostgreSQL для разработчиков приложений", Павел Лузанов, (Постгрес Профессио...
PPTX
"Великолепный API без Rest", Констатин Якушев (Badoo)
PPTX
"Геолокация в Badoo", Андрей Воликов (Badoo)
PDF
"Обзор Tarantool DB"
PDF
"Почему язык Lua — это интересно?", Ник Заварицкий, (Mail.ru Group)
PDF
"Развитие ветки PHP-7"
PPTX
TechLeads meetup: Евгений Потапов, ITSumma
PDF
TechLeads meetup: Макс Лапшин, Erlyvideo
PDF
TechLeads meetup: Алексей Рыбак, Badoo
PPTX
TechLeads meetup: Андрей Шелёхин, Tinkoff.ru
PDF
Docker networking
PDF
Мобильный веб: назад в будущее
PDF
Мониторь, автоматизируй Docker
PDF
Технологии vs коммуникации: что важнее?
PPTX
Багфиксинг процесса разработки в iOS: взгляд с двух сторон
PDF
Как автотесты ускоряют релизы в OK.ru
PDF
Docker в Badoo: ПМЖ или временная регистрация
PDF
Docker penetration
PDF
Эволюция клиентской разработки: от веба ко "всеобщей мобилизации"
PDF
Ровная балансировка нагрузки на фронтенд-кластере
"PostgreSQL для разработчиков приложений", Павел Лузанов, (Постгрес Профессио...
"Великолепный API без Rest", Констатин Якушев (Badoo)
"Геолокация в Badoo", Андрей Воликов (Badoo)
"Обзор Tarantool DB"
"Почему язык Lua — это интересно?", Ник Заварицкий, (Mail.ru Group)
"Развитие ветки PHP-7"
TechLeads meetup: Евгений Потапов, ITSumma
TechLeads meetup: Макс Лапшин, Erlyvideo
TechLeads meetup: Алексей Рыбак, Badoo
TechLeads meetup: Андрей Шелёхин, Tinkoff.ru
Docker networking
Мобильный веб: назад в будущее
Мониторь, автоматизируй Docker
Технологии vs коммуникации: что важнее?
Багфиксинг процесса разработки в iOS: взгляд с двух сторон
Как автотесты ускоряют релизы в OK.ru
Docker в Badoo: ПМЖ или временная регистрация
Docker penetration
Эволюция клиентской разработки: от веба ко "всеобщей мобилизации"
Ровная балансировка нагрузки на фронтенд-кластере
Ad

Similar to "Производительность MySQL: что нового?" (20)

ODP
Innodb Scalability And New Features Hl2008 Rus
PDF
OpenSource SQL Databases Enter Millions Queries per Second Era
PDF
My sql 5.6-new-stable-mmug
PDF
Современному хайлоду - современные решения: MySQL 8.0 и улучшения Percona
PDF
Kopytov
PDF
SQL-ник DevDay. Рубцов. Новое в Percona Server и MariaDB в сравнении с MySQL 5.5
PDF
MySQL: чек-лист для новичка в highload (Cвета Cмирнова, Aнастасия Распопина ...
PDF
MySQL - checklist для новичка в Highload
PDF
MySQL: чек-лист для новичка в highload / Анастасия Распопина, Света Смирнова ...
PDF
Checklistfinal perconaconf
PDF
Введение в отладку производительности MySQL приложений
PDF
MySQL 8.0
PDF
Что нужно знать о трёх топовых фичах MySQL
ODP
Wonderful World Of Mysql Storage Engines Hl2008 Rus
PDF
Devconf2013 new-features-in-mysql-and-mariadb
PDF
Новые возможности отладки MySQL 5.7 на практике
PDF
Мониторинг и отладка MySQL: максимум информации при минимальных потерях
PDF
Производительность MySQL для DevOps
PPT
MySQL для высоконагруженных проектов
PPT
поиск узких мест в производительности My sql ботанический определитель. г. ру...
Innodb Scalability And New Features Hl2008 Rus
OpenSource SQL Databases Enter Millions Queries per Second Era
My sql 5.6-new-stable-mmug
Современному хайлоду - современные решения: MySQL 8.0 и улучшения Percona
Kopytov
SQL-ник DevDay. Рубцов. Новое в Percona Server и MariaDB в сравнении с MySQL 5.5
MySQL: чек-лист для новичка в highload (Cвета Cмирнова, Aнастасия Распопина ...
MySQL - checklist для новичка в Highload
MySQL: чек-лист для новичка в highload / Анастасия Распопина, Света Смирнова ...
Checklistfinal perconaconf
Введение в отладку производительности MySQL приложений
MySQL 8.0
Что нужно знать о трёх топовых фичах MySQL
Wonderful World Of Mysql Storage Engines Hl2008 Rus
Devconf2013 new-features-in-mysql-and-mariadb
Новые возможности отладки MySQL 5.7 на практике
Мониторинг и отладка MySQL: максимум информации при минимальных потерях
Производительность MySQL для DevOps
MySQL для высоконагруженных проектов
поиск узких мест в производительности My sql ботанический определитель. г. ру...

More from Badoo Development (20)

PDF
Viktar Karanevich – iOS Parallel Automation
PDF
Как мы делаем модули PHP в Badoo – Антон Довгаль
PDF
Григорий Джанелидзе, OK.RU
PPTX
Андрей Сидоров, Яндекс.Браузер
PDF
Филипп Уваров, Avito
PDF
Cocoaheads Meetup / Alex Zimin / Swift magic
PDF
Cocoaheads Meetup / Kateryna Trofimenko / Feature development
PDF
Alex Krasheninnikov – Hadoop High Availability
PDF
Андрей Денисов – В ожидании мониторинга баз данных
PDF
Александр Зобнин, Grafana Labs
PDF
Илья Аблеев – Zabbix в Badoo: реагируем быстро и качественно
PDF
Паша Мурзаков: Как 200 строк на Go помогли нам освободить 15 серверов»
PPTX
Как мы готовим MySQL
PPTX
Архитектура хранения и отдачи фотографий в Badoo
PDF
5 способов деплоя PHP-кода в условиях хайлоада
PDF
ChromeDriver Jailbreak
PDF
Git хуки на страже качества кода
PDF
Versioning strategy for a complex internal API
PDF
Как мы готовим MySQL
PDF
Методология: БЭМ, Модули, Отношения
Viktar Karanevich – iOS Parallel Automation
Как мы делаем модули PHP в Badoo – Антон Довгаль
Григорий Джанелидзе, OK.RU
Андрей Сидоров, Яндекс.Браузер
Филипп Уваров, Avito
Cocoaheads Meetup / Alex Zimin / Swift magic
Cocoaheads Meetup / Kateryna Trofimenko / Feature development
Alex Krasheninnikov – Hadoop High Availability
Андрей Денисов – В ожидании мониторинга баз данных
Александр Зобнин, Grafana Labs
Илья Аблеев – Zabbix в Badoo: реагируем быстро и качественно
Паша Мурзаков: Как 200 строк на Go помогли нам освободить 15 серверов»
Как мы готовим MySQL
Архитектура хранения и отдачи фотографий в Badoo
5 способов деплоя PHP-кода в условиях хайлоада
ChromeDriver Jailbreak
Git хуки на страже качества кода
Versioning strategy for a complex internal API
Как мы готовим MySQL
Методология: БЭМ, Модули, Отношения

"Производительность MySQL: что нового?"

  • 2. Производительность MySQL: что нового? Алексей Копытов
  • 3. О чём доклад? обзор изменений производительности за ~2 года альтернативы InnoDB (MyRocks, TokuDB) текущие проблемы
  • 4. MySQL 5.7! GA версия выпущена 19 октября 2015г. качественный релиз огромное количество новый функций и улучшений производительности обзорный доклад по всем новым возможностям от Дмитрия Ленёва сегодня
  • 5. Скорость соединения создание нового соединения стало быстрее особенно когда много клиентов sysbench connect:
  • 6. Производительность на read-only нагрузках sysbench OLTP POINT_SELECT , 72 ядра (4x18-ядерных Intel Xeon E7-58800 v3): работа по оптимизации началась ещё в 5.6 дальнейшие улучшения масштабируемости в 5.7: 1.6 миллиона key/value запросов в секунду 1.8 миллиона, если использовать prepared statements нет записи в базу (не назначается и не записывается TRX_ID ) оптимизации в MDL коде для DML запросов засчёт более дорогих DDL блокировок устранение THR_LOCK блокировок для InnoDB таблиц
  • 7. Производительность на read-only нагрузках Read-only транзакции больше не нужно явно помечать: в MySQL 5.6 требуется явное указание не-AUTOCOMMIT транзакций START TRANSACTION READ ONLY SELECT ...; SELECT ...; COMMIT; SQL в MySQL 5.7 транзакции считаются read-only по умолчанию. START TRANSACTION; SELECT ...; SELECT ...; COMMIT; SQL
  • 8. Производительность на read-only нагрузках sysbench OLTP RO, 72 ядра (4x18-ядерных Intel Xeon E7-58800 v3): 1M запросов (~70K OLTP_RO транзакций) в секунду
  • 9. Производительность на read-only нагрузках Обычный Adaptive Hash Index: Cекционированный Adaptive Hash Index использует хэш для поиска по "популярным" значениям B-Tree ключей хэш при частых обновлениях становится узким местом обновления возможны даже при read-only нагрузке! секционируем по index_id реализовано в XtraDB (<= 2009г.) аналогичная опция в MySQL 5.7 ( innodb_adaptive_hash_index_parts [=8])
  • 10. Производительность на read-only нагрузках Оставшиеся проблемы с масштабируемостью: Adaptive Hash Index блокировки страниц в buffer pool (block lock) bug #74954 "Inefficient InnoDB row stats implementation" и bug #79455 "Restore get_sched_indexer_t in 5.7" на IO-bound read-only нагрузках: fil_system->mutex секционирование по index_id – не самый лучший вариант обещают полностью переписать в MySQL 8 мьютексы были переписаны в 5.7 rwlock-и плохо масштабируются, обещают переписать в MySQL 8 cчётчики считанных/изменённых записей плохо масштабируются на многоядерных архитектурах
  • 11. Производительность на read-write нагрузках убрали index lock: меньше блокировок на log_sys->mutex сброс страниц на диск (flushing) блокировка на весь индекс, когда нужно изменить структуру дерева в 5.7 блокировка только при конфликтующих изменениях в основном для innodb_flush_log_at_trx_commit=2 несколько параллельных потоков ( innodb_page_cleaners=4 ) оптимизации в адаптивном алгоритме
  • 12. Производительность на read-write нагрузках Временные InnoDB таблицы в 5.7: используются вместо MyISAM по умолчанию оптимизатором для внутренних таблиц не генерируют записей в транзакционный журнал отдельное табличное пространство ibtmp1 – пересоздаётся при старте "ослабленный" MVCC не используют doublewrite buffer быстрее MyISAM в большинстве случаев
  • 13. Производительность на read-write нагрузках Проблемы: проблемы с масштабируемостью из-за неуспеващего флашинга doublewrite в качестве «узкого места» innodb_log_write_ahead_size увеличивает write amplification при innodb_flush_log_at_trx_commit=1
  • 14. Производительность на read-write нагрузках Percona Server: отдельные потоки для LRU flushing параллельный doublewrite buffer:
  • 15. Производительность на read-write нагрузках много улучшений но есть куда стремиться работа кипит :)
  • 16. Новые системные переменные innodb_buffer_pool_size теперь динамическая переменная innodb_buffer_pool_dump_pct=25 innodb_fill_factor=100 (для sorted index build) innodb_log_write_ahead_size=8192 innodb_numa_interleave=off innodb_page_cleaners=1
  • 17. Изменения в значениях по умолчанию Системные переменные с новыми значениями по умолчанию в 5.7: binlog_format=row sync_binlog=1 ssl=1 innodb_buffer_pool_dump_at_shutdown=on и innodb_buffer_pool_load_at_startup=on innodb_checksum_algorithm=crc32 innodb_log_buffer_size=16M innodb_purge_threads=4 table_open_cache_instances=16
  • 19. MyRocks движок хранения от Facebook на основе RocksDB (форк LevelDB от Google) LSM-деревья, оптимизирован на запись 9 миллиардов запросов/сек в Facebook низкий write amplification (SSD!) высокая компрессия (SSD!)
  • 20. MyRocks Источник: Mark Callaghan, MyRocks, MongoRocks & RocksDB
  • 21. MyRocks Источник: Mark Callaghan, MyRocks, MongoRocks & RocksDB
  • 22. Ограничения MyRocks нет поддержки многих возможностей InnoDB только бинарные правила сортировки (collations) нет в MariaDB/Percona стабильность уровня "можно пробовать" секционирование online DDL transportable tablespaces внешние ключи геометрические/полнотекстовые индексы виртуальные колонки
  • 23. TokuDB разработка с 2007г. "фрактальные" деревья на самом деле B-Tree с расширениями разрабатывается в Percona с 2015г.
  • 24. TokuDB Фрактальные деревья: накапливание отложенных изменений в корневых узлах индексов ипроталкивание к листьям по мере заполнения
  • 25. TokuDB Сильные стороны: быстрее InnoDB при большом количестве индексов несколько кластеризованных индексов интенсивные нагрузки на запись, когда dataset > RAM экономия места на диске за счёт продвинутой компрессии (SSD!) read-free репликация
  • 26. Ограничения TokuDB Нет поддержки многих возможностей InnoDB: проблема с чекпойнтами и стабильностью времени отклика (источник: percona.com/blog) секционирование online DDL transportable tablespaces внешние ключи геометрические/полнотекстовые индексы виртуальные колонки уникальные индексы – медленно SELECT -ы дорогие низкие темпы разработки
  • 27. Текущие проблемы и будущие версии MySQL
  • 28. Однопоточная производительность каждый мажорный релиз MySQL на ~5% медленее предыдущего (но лучшемасштабируется) серия публикаций от Mark Callaghan и Петра Зайцева
  • 29. Однопоточная производительность Почему это важно: производительность в 1 соединение == время отклика параллельность репликации ограничена административные задачи – как правило один поток в большинстве случаев сервер работает с небольшим количеством соединений
  • 30. Однопоточная производительность Почему это сложно: от версии к версии кода больше больше ветвелений, кэш-промахов и т. д. дробление блокировок ведёт к лучше масштабируемости, но болеемедленной однопоточной работе нет "низковисящих фруктов"
  • 31. Однопоточная производительность Почему это до сих пор проблема: MariaDB работали в этом направлении, но о результатах ничего неизвестно не приоритет для разработчиков нужно помочь приоритизировать не стесняйтесь сообщать на http://bugs.mysql.com/, если для вас это тоже проблема
  • 32. Умная поддержка NUMA Предыстория вопроса: Twitter/Percona/MariaDB, 2012: Jeremy Cole, 2010: The MySQL “swap insanity” problem and the effects of the NUMA architecture сбросить FS cache включить чередование страниц обеспечить инициализацию страниц памяти при старта, а не в процессе работы чередование страниц buffer pool + равномерное распределение между нодами numa_interleave innodb_buffer_pool_populate flush_caches
  • 33. Умная поддержка NUMA Oracle MySQL, 2015: innodb_numa_interleave – только частичное решение проблемы опция flush_caches оставлена в Percona Server 5.7
  • 34. Умная поддержка NUMA проблема с NUMA не только в излишнем использовании swap. NUMA cache line contention: многие структуры данных не используют чередование: bug #79358: No NUMA interleaving for some shared structures "горячие" структуры данных в основном в одной NUMA ноде блокировки вызывают значительный трафик между нодами внутренний словарь данных в InnoDB кэш табличных пространств буфер транзакционного журнала и т.д.
  • 35. Умный параллельный purge purge не справляется на нагрузках с очень интенсивной записью несколько purge потоков соревнуются за один и тот же индекс нужно более "интеллектуальное" распределение задач между потоками https://bugs.mysql.com/81368 экспериментальный патч в Percona ~ 2013г. скорее всего полный редизайн в MySQL 8