Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
MySQL/InnoDB изнутри:узкие местаАлександр Крижановский
Узкие Места (о чем пойдет речь)● InnoDB в MySQL (5.5, 5.6), Percona Server, MariaDB● MySQL 5.6.11 т.к. 5.6 продолжает опти...
Buffer PoolMySQL, Percona Server, MariaDB● Собственный кэш БД с 16KB страницами● Вытеснение страниц по LRU● Асинхронное (b...
Потоки Вытеснения из Buffer PoolMySQL 5.1, 5.5 (MariaDB 5.5, Percona Server 5.5)● flush_list — master_thread (может быть п...
LRU (Least Recently Used)● В кэше только страницы, к которым недавно обращались● Частота обращений не учитывается (нет ист...
CAR/CART● Clock with Adaptive Replacement (CAR)● CAR with Temporal filtering (CART)
Kernel Mutex в MySQL 5.1 и 5.5(Percona Server 5.5, MariaDB 5.5)● Locking● record lock: создание, взятие/снятие, поиск конф...
lock_sys->mutex и trx_sys->mutex в MySQL 5.6(Percona Server 5.6, MariaDB 10.0)● Locking:● все тоже самое, но с lock_sys->m...
Репликация Galera (Database State Machine)и Локи● Database StateMachine:детерминированностьпереходов посостояниям разных н...
Репликация Galera: сертификация● 3 транзакции содним primary key● 4 rollbackа навсех нодах
Гранулярность Латчейдля Record и Table Locks● Отдельные латчи для Table и Record локов● N латчей для таблиц и M латчей для...
Многопоточная Репликация: MySQL 5.6● Per-database concurrency● slave-parallel-workers — число slave потоков (не имеет смыс...
Многопоточная Репликация: Galera● wsrep_slave_threads — число slave потоков● apply_cb() выполняется после сертификации, ко...
Многопоточная Асинхронная Репликация● Нужны global transaction ID для async replication● Поток slave_sql вместо исполнения...
Спасибо!ak@natsys-lab.com
Upcoming SlideShare
Loading in …5
×

MySQL/InnoDB изнутри: узкие места / Александр Крижановский (NatSys Lab)

950 views

Published on

  • Be the first to comment

MySQL/InnoDB изнутри: узкие места / Александр Крижановский (NatSys Lab)

  1. 1. MySQL/InnoDB изнутри:узкие местаАлександр Крижановский
  2. 2. Узкие Места (о чем пойдет речь)● InnoDB в MySQL (5.5, 5.6), Percona Server, MariaDB● MySQL 5.6.11 т.к. 5.6 продолжает оптимизироваться (5.6.2,5.6.4, ...)● Репликация Galera и стандартная асинхронная репликация● Узкие места:● вытеснение страниц из buffer pool● kernel mutex● однопоточная репликация
  3. 3. Buffer PoolMySQL, Percona Server, MariaDB● Собственный кэш БД с 16KB страницами● Вытеснение страниц по LRU● Асинхронное (background) или синхронное вытеснение(блокируется поток запроса)● Страница может быть в● flush_list – список грязных страниц (нехватка места в redo log)● LRU_list – список страниц, к которым был доступ (нехваткаместа в buffer pool)
  4. 4. Потоки Вытеснения из Buffer PoolMySQL 5.1, 5.5 (MariaDB 5.5, Percona Server 5.5)● flush_list — master_thread (может быть пробужен потоком запроса)● LRU_list — потоки запросовMySQL 5.6 (MariaDB 10.0, Percona Server 5.6)● flush_list — master_thread (checkpoint), поток page_cleaner● LRU_list — поток page_cleaner
  5. 5. LRU (Least Recently Used)● В кэше только страницы, к которым недавно обращались● Частота обращений не учитывается (нет истории)=> При сканировании ведет себя очень плохо
  6. 6. CAR/CART● Clock with Adaptive Replacement (CAR)● CAR with Temporal filtering (CART)
  7. 7. Kernel Mutex в MySQL 5.1 и 5.5(Percona Server 5.5, MariaDB 5.5)● Locking● record lock: создание, взятие/снятие, поиск конфликтующихлоков, операции с хэшем локов, ...● table lock: создание, взятие/поиск конфликтов, ...● Рекурсивный поиск дедлоков● Transaction commit/rollback● создание транзакции (аллокация памяти, Bug# 54982)● MVCC views● создание read view (аллокация памяти, Bug# 49169)
  8. 8. lock_sys->mutex и trx_sys->mutex в MySQL 5.6(Percona Server 5.6, MariaDB 10.0)● Locking:● все тоже самое, но с lock_sys->mutex● Transaction commit/rollback & MVCC views:● RO транзакции не учавствуют в MVCC snapshot● 2 списка транзакций: trx_sys->rw_trx_list и trx_sys->ro_trx_list● При создании read view (аллокация памяти) беретсяtrx_sys->mutex● при создании транзакции мьютекс уже не берется
  9. 9. Репликация Galera (Database State Machine)и Локи● Database StateMachine:детерминированностьпереходов посостояниям разных нодкластера● На rollback такжезадействованkernel_mutex
  10. 10. Репликация Galera: сертификация● 3 транзакции содним primary key● 4 rollbackа навсех нодах
  11. 11. Гранулярность Латчейдля Record и Table Locks● Отдельные латчи для Table и Record локов● N латчей для таблиц и M латчей для строк● Латчи хранятся в хэш-таблице с индексом по:● блоку (lock_rec_hash(space, page_no)) для record lockов (recordlockи сами хранятся в хэше, индексируемом блоком => одинлатч будет защищать один и тот же набор локов)● по tablespace (innodb_file_per_table)
  12. 12. Многопоточная Репликация: MySQL 5.6● Per-database concurrency● slave-parallel-workers — число slave потоков (не имеет смыслставить больше, чем число баз данных)● GTID (Global Transaction Identifiers)● tuple <SERVER_UUID, GNO> : GNO = 1,2,3,..● Был еще и Google GTID для MySQL 5.0 и 5.1
  13. 13. Многопоточная Репликация: Galera● wsrep_slave_threads — число slave потоков● apply_cb() выполняется после сертификации, которая:● захватывает монитор (local ordering)● проверяет global seqno транзакции● проверяет зависимость транзакций по primary keys● wsrep_apply_cb() → wsrep_apply_rbr() → ev->apply_event()
  14. 14. Многопоточная Асинхронная Репликация● Нужны global transaction ID для async replication● Поток slave_sql вместо исполнения эвентов, кладет их в очередь,разделяемую workerами● Workerы конвертируют эвент в Galera writeset и передают егоGalera Replicatorу
  15. 15. Спасибо!ak@natsys-lab.com

×