SlideShare une entreprise Scribd logo
1  sur  15
MySQL/InnoDB изнутри:
узкие места
Александр Крижановский
Узкие Места (о чем пойдет речь)
● 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
● однопоточная репликация
Buffer Pool
MySQL, Percona Server, MariaDB
● Собственный кэш БД с 16KB страницами
● Вытеснение страниц по LRU
● Асинхронное (background) или синхронное вытеснение
(блокируется поток запроса)
● Страница может быть в
● flush_list – список грязных страниц (нехватка места в redo log)
● LRU_list – список страниц, к которым был доступ (нехватка
места в buffer pool)
Потоки Вытеснения из Buffer Pool
MySQL 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
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: создание, взятие/снятие, поиск конфликтующих
локов, операции с хэшем локов, ...
● table lock: создание, взятие/поиск конфликтов, ...
● Рекурсивный поиск дедлоков
● Transaction commit/rollback
● создание транзакции (аллокация памяти, Bug# 54982)
● MVCC views
● создание read view (аллокация памяти, Bug# 49169)
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
● при создании транзакции мьютекс уже не берется
Репликация Galera (Database State Machine)
и Локи
● Database State
Machine:
детерминированность
переходов по
состояниям разных нод
кластера
● На rollback также
задействован
kernel_mutex
Репликация Galera: сертификация
● 3 транзакции с
одним primary key
● 4 rollback'а на
всех нодах
Гранулярность Латчей
для Record и Table Locks
● Отдельные латчи для Table и Record локов
● N латчей для таблиц и M латчей для строк
● Латчи хранятся в хэш-таблице с индексом по:
● блоку (lock_rec_hash(space, page_no)) для record lock'ов (record
lock'и сами хранятся в хэше, индексируемом блоком => один
латч будет защищать один и тот же набор локов)
● по tablespace (innodb_file_per_table)
Многопоточная Репликация: 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
Многопоточная Репликация: Galera
● wsrep_slave_threads — число slave потоков
● apply_cb() выполняется после сертификации, которая:
● захватывает монитор (local ordering)
● проверяет global seqno транзакции
● проверяет зависимость транзакций по primary keys
● wsrep_apply_cb() → wsrep_apply_rbr() → ev->apply_event()
Многопоточная Асинхронная Репликация
● Нужны global transaction ID для async replication
● Поток slave_sql вместо исполнения эвентов, кладет их в очередь,
разделяемую worker'ами
● Worker'ы конвертируют эвент в Galera writeset и передают его
Galera Replicator'у
Спасибо!
ak@natsys-lab.com

Contenu connexe

Tendances

nginx internals
nginx internalsnginx internals
nginx internals
redivy
 
Web весна 2013 лекция 3
Web весна 2013 лекция 3Web весна 2013 лекция 3
Web весна 2013 лекция 3
Technopark
 
Практическое применение HTML5 в Я.Почте
Практическое применение HTML5 в Я.ПочтеПрактическое применение HTML5 в Я.Почте
Практическое применение HTML5 в Я.Почте
Alexey Androsov
 
Абак Пресс
Абак ПрессАбак Пресс
Абак Пресс
it-people
 
Web осень 2012 лекция 3
Web осень 2012 лекция 3Web осень 2012 лекция 3
Web осень 2012 лекция 3
Technopark
 
Как построить высокопроизводительный Front-end сервер (Александр Крижановский)
Как построить высокопроизводительный Front-end сервер (Александр Крижановский) Как построить высокопроизводительный Front-end сервер (Александр Крижановский)
Как построить высокопроизводительный Front-end сервер (Александр Крижановский)
Ontico
 
Hacking PostgreSQL. Обзор исходного кода
Hacking PostgreSQL. Обзор исходного кодаHacking PostgreSQL. Обзор исходного кода
Hacking PostgreSQL. Обзор исходного кода
Anastasia Lubennikova
 
Хранение данных на виниле / Константин Осипов (tarantool.org)
Хранение данных на виниле / Константин Осипов (tarantool.org)Хранение данных на виниле / Константин Осипов (tarantool.org)
Хранение данных на виниле / Константин Осипов (tarantool.org)
Ontico
 

Tendances (20)

Moscow Exchange Test Automation of a Backup System at TMPA-2014 (Trading Syst...
Moscow Exchange Test Automation of a Backup System at TMPA-2014 (Trading Syst...Moscow Exchange Test Automation of a Backup System at TMPA-2014 (Trading Syst...
Moscow Exchange Test Automation of a Backup System at TMPA-2014 (Trading Syst...
 
nginx internals
nginx internalsnginx internals
nginx internals
 
Первые шаги с RabbitMQ
Первые шаги с RabbitMQПервые шаги с RabbitMQ
Первые шаги с RabbitMQ
 
17 - Web-технологии. Real Time сообщения
17 - Web-технологии. Real Time сообщения17 - Web-технологии. Real Time сообщения
17 - Web-технологии. Real Time сообщения
 
Web весна 2013 лекция 3
Web весна 2013 лекция 3Web весна 2013 лекция 3
Web весна 2013 лекция 3
 
Практическое применение HTML5 в Я.Почте
Практическое применение HTML5 в Я.ПочтеПрактическое применение HTML5 в Я.Почте
Практическое применение HTML5 в Я.Почте
 
08 - Web-технологии. Архитектура frontend-backend
08 - Web-технологии. Архитектура frontend-backend08 - Web-технологии. Архитектура frontend-backend
08 - Web-технологии. Архитектура frontend-backend
 
Абак Пресс
Абак ПрессАбак Пресс
Абак Пресс
 
05 db server_deployment_ru
05 db server_deployment_ru05 db server_deployment_ru
05 db server_deployment_ru
 
Применяем Ansible
Применяем AnsibleПрименяем Ansible
Применяем Ansible
 
2014.10.15 Сергей Бурладян, Avito.ru
2014.10.15 Сергей Бурладян, Avito.ru2014.10.15 Сергей Бурладян, Avito.ru
2014.10.15 Сергей Бурладян, Avito.ru
 
2014.10.15 Мурат Кабилов, Avito.ru #PostgreSQLRussia
2014.10.15 Мурат Кабилов, Avito.ru #PostgreSQLRussia2014.10.15 Мурат Кабилов, Avito.ru #PostgreSQLRussia
2014.10.15 Мурат Кабилов, Avito.ru #PostgreSQLRussia
 
Анатолий Полицын, агентство интернет-маркетинга «Синапс» — Корпоративный хост...
Анатолий Полицын, агентство интернет-маркетинга «Синапс» — Корпоративный хост...Анатолий Полицын, агентство интернет-маркетинга «Синапс» — Корпоративный хост...
Анатолий Полицын, агентство интернет-маркетинга «Синапс» — Корпоративный хост...
 
Web осень 2012 лекция 3
Web осень 2012 лекция 3Web осень 2012 лекция 3
Web осень 2012 лекция 3
 
Как построить высокопроизводительный Front-end сервер (Александр Крижановский)
Как построить высокопроизводительный Front-end сервер (Александр Крижановский) Как построить высокопроизводительный Front-end сервер (Александр Крижановский)
Как построить высокопроизводительный Front-end сервер (Александр Крижановский)
 
Hacking PostgreSQL. Обзор исходного кода
Hacking PostgreSQL. Обзор исходного кодаHacking PostgreSQL. Обзор исходного кода
Hacking PostgreSQL. Обзор исходного кода
 
01 - Web-технологии. Архитектура Web приложений
01 - Web-технологии. Архитектура Web приложений01 - Web-технологии. Архитектура Web приложений
01 - Web-технологии. Архитектура Web приложений
 
Хранение данных на виниле / Константин Осипов (tarantool.org)
Хранение данных на виниле / Константин Осипов (tarantool.org)Хранение данных на виниле / Константин Осипов (tarantool.org)
Хранение данных на виниле / Константин Осипов (tarantool.org)
 
Сергей Пузанков — Новый Поиск по блогам на bem-node
Сергей Пузанков — Новый Поиск по блогам на bem-nodeСергей Пузанков — Новый Поиск по блогам на bem-node
Сергей Пузанков — Новый Поиск по блогам на bem-node
 
WWW
WWWWWW
WWW
 

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

Hosting for forbes.ru_
Hosting for forbes.ru_Hosting for forbes.ru_
Hosting for forbes.ru_
drupalconf
 
Mysql replication DevConf 2012
Mysql replication DevConf 2012Mysql replication DevConf 2012
Mysql replication DevConf 2012
Alex Chistyakov
 
Практический опыт использования некоторых современных решений репликации MySQL
Практический опыт использования некоторых современных решений репликации MySQLПрактический опыт использования некоторых современных решений репликации MySQL
Практический опыт использования некоторых современных решений репликации MySQL
Alex Chistyakov
 
Cравнительный анализ хранилищ данных (Олег Царев, Кирилл Коринский)
Cравнительный анализ хранилищ данных (Олег Царев, Кирилл Коринский)Cравнительный анализ хранилищ данных (Олег Царев, Кирилл Коринский)
Cравнительный анализ хранилищ данных (Олег Царев, Кирилл Коринский)
Ontico
 
Кластеры баз данных делаем сложные вещи просто / Андрей Тихонов (Avito)
Кластеры баз данных делаем сложные вещи просто / Андрей Тихонов (Avito)Кластеры баз данных делаем сложные вещи просто / Андрей Тихонов (Avito)
Кластеры баз данных делаем сложные вещи просто / Андрей Тихонов (Avito)
Ontico
 
Практика использования NoSQL в высоконагруженном проекте (Дмитрий Ананьев)
Практика использования NoSQL в высоконагруженном проекте (Дмитрий Ананьев)Практика использования NoSQL в высоконагруженном проекте (Дмитрий Ананьев)
Практика использования NoSQL в высоконагруженном проекте (Дмитрий Ананьев)
Ontico
 
Alexander Krizhanovsky Krizhanovsky Hpds
Alexander Krizhanovsky Krizhanovsky HpdsAlexander Krizhanovsky Krizhanovsky Hpds
Alexander Krizhanovsky Krizhanovsky Hpds
guest092df8
 
VMUG Moscow 2014 Проблемы с дисками?
VMUG Moscow 2014 Проблемы с дисками?VMUG Moscow 2014 Проблемы с дисками?
VMUG Moscow 2014 Проблемы с дисками?
Anton Zhbankov
 

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

SQL-ник DevDay. Рубцов. Новое в Percona Server и MariaDB в сравнении с MySQL 5.5
SQL-ник DevDay. Рубцов. Новое в Percona Server и MariaDB в сравнении с MySQL 5.5SQL-ник DevDay. Рубцов. Новое в Percona Server и MariaDB в сравнении с MySQL 5.5
SQL-ник DevDay. Рубцов. Новое в Percona Server и MariaDB в сравнении с MySQL 5.5
 
Hosting for forbes.ru_
Hosting for forbes.ru_Hosting for forbes.ru_
Hosting for forbes.ru_
 
Оптимизация программ для современных процессоров и Linux, Александр Крижановс...
Оптимизация программ для современных процессоров и Linux, Александр Крижановс...Оптимизация программ для современных процессоров и Linux, Александр Крижановс...
Оптимизация программ для современных процессоров и Linux, Александр Крижановс...
 
Mysql replication DevConf 2012
Mysql replication DevConf 2012Mysql replication DevConf 2012
Mysql replication DevConf 2012
 
Эволюция репликации в MySQL и MariaDB
Эволюция репликации в MySQL и MariaDBЭволюция репликации в MySQL и MariaDB
Эволюция репликации в MySQL и MariaDB
 
Практический опыт использования некоторых современных решений репликации MySQL
Практический опыт использования некоторых современных решений репликации MySQLПрактический опыт использования некоторых современных решений репликации MySQL
Практический опыт использования некоторых современных решений репликации MySQL
 
Cравнительный анализ хранилищ данных (Олег Царев, Кирилл Коринский)
Cравнительный анализ хранилищ данных (Олег Царев, Кирилл Коринский)Cравнительный анализ хранилищ данных (Олег Царев, Кирилл Коринский)
Cравнительный анализ хранилищ данных (Олег Царев, Кирилл Коринский)
 
История небольшого успеха с PostgreSQL – Владимир Бородин
История небольшого успеха с PostgreSQL – Владимир БородинИстория небольшого успеха с PostgreSQL – Владимир Бородин
История небольшого успеха с PostgreSQL – Владимир Бородин
 
2014.09.24 история небольшого успеха с PostgreSQL (Yandex)
2014.09.24 история небольшого успеха с PostgreSQL (Yandex)2014.09.24 история небольшого успеха с PostgreSQL (Yandex)
2014.09.24 история небольшого успеха с PostgreSQL (Yandex)
 
Кластеры баз данных делаем сложные вещи просто / Андрей Тихонов (Avito)
Кластеры баз данных делаем сложные вещи просто / Андрей Тихонов (Avito)Кластеры баз данных делаем сложные вещи просто / Андрей Тихонов (Avito)
Кластеры баз данных делаем сложные вещи просто / Андрей Тихонов (Avito)
 
Streaming replication in practice
Streaming replication in practiceStreaming replication in practice
Streaming replication in practice
 
Практика использования NoSQL в высоконагруженном проекте (Дмитрий Ананьев)
Практика использования NoSQL в высоконагруженном проекте (Дмитрий Ананьев)Практика использования NoSQL в высоконагруженном проекте (Дмитрий Ананьев)
Практика использования NoSQL в высоконагруженном проекте (Дмитрий Ананьев)
 
Kopytov
KopytovKopytov
Kopytov
 
Alexander Krizhanovsky Krizhanovsky Hpds
Alexander Krizhanovsky Krizhanovsky HpdsAlexander Krizhanovsky Krizhanovsky Hpds
Alexander Krizhanovsky Krizhanovsky Hpds
 
pgconf.ru 2015 avito postgresql
pgconf.ru 2015 avito postgresqlpgconf.ru 2015 avito postgresql
pgconf.ru 2015 avito postgresql
 
Linuxvirt seminar-csc-2015
Linuxvirt seminar-csc-2015Linuxvirt seminar-csc-2015
Linuxvirt seminar-csc-2015
 
(1 часть) 1С-Битрикс. Как настроить двухуровневую конфигурацию веб-приложения...
(1 часть) 1С-Битрикс. Как настроить двухуровневую конфигурацию веб-приложения...(1 часть) 1С-Битрикс. Как настроить двухуровневую конфигурацию веб-приложения...
(1 часть) 1С-Битрикс. Как настроить двухуровневую конфигурацию веб-приложения...
 
VMUG Moscow 2014 Проблемы с дисками?
VMUG Moscow 2014 Проблемы с дисками?VMUG Moscow 2014 Проблемы с дисками?
VMUG Moscow 2014 Проблемы с дисками?
 
Что особенного в СУБД для данных в оперативной памяти / Константин Осипов (Ta...
Что особенного в СУБД для данных в оперативной памяти / Константин Осипов (Ta...Что особенного в СУБД для данных в оперативной памяти / Константин Осипов (Ta...
Что особенного в СУБД для данных в оперативной памяти / Константин Осипов (Ta...
 
Anton Tsitou "Cycle ORM and Graphs"
Anton Tsitou "Cycle ORM and Graphs"Anton Tsitou "Cycle ORM and Graphs"
Anton Tsitou "Cycle ORM and Graphs"
 

Plus de Ontico

Готовим тестовое окружение, или сколько тестовых инстансов вам нужно / Алекса...
Готовим тестовое окружение, или сколько тестовых инстансов вам нужно / Алекса...Готовим тестовое окружение, или сколько тестовых инстансов вам нужно / Алекса...
Готовим тестовое окружение, или сколько тестовых инстансов вам нужно / Алекса...
Ontico
 

Plus de Ontico (20)

One-cloud — система управления дата-центром в Одноклассниках / Олег Анастасье...
One-cloud — система управления дата-центром в Одноклассниках / Олег Анастасье...One-cloud — система управления дата-центром в Одноклассниках / Олег Анастасье...
One-cloud — система управления дата-центром в Одноклассниках / Олег Анастасье...
 
Масштабируя DNS / Артем Гавриченков (Qrator Labs)
Масштабируя DNS / Артем Гавриченков (Qrator Labs)Масштабируя DNS / Артем Гавриченков (Qrator Labs)
Масштабируя DNS / Артем Гавриченков (Qrator Labs)
 
Создание BigData-платформы для ФГУП Почта России / Андрей Бащенко (Luxoft)
Создание BigData-платформы для ФГУП Почта России / Андрей Бащенко (Luxoft)Создание BigData-платформы для ФГУП Почта России / Андрей Бащенко (Luxoft)
Создание BigData-платформы для ФГУП Почта России / Андрей Бащенко (Luxoft)
 
Готовим тестовое окружение, или сколько тестовых инстансов вам нужно / Алекса...
Готовим тестовое окружение, или сколько тестовых инстансов вам нужно / Алекса...Готовим тестовое окружение, или сколько тестовых инстансов вам нужно / Алекса...
Готовим тестовое окружение, или сколько тестовых инстансов вам нужно / Алекса...
 
Новые технологии репликации данных в PostgreSQL / Александр Алексеев (Postgre...
Новые технологии репликации данных в PostgreSQL / Александр Алексеев (Postgre...Новые технологии репликации данных в PostgreSQL / Александр Алексеев (Postgre...
Новые технологии репликации данных в PostgreSQL / Александр Алексеев (Postgre...
 
PostgreSQL Configuration for Humans / Alvaro Hernandez (OnGres)
PostgreSQL Configuration for Humans / Alvaro Hernandez (OnGres)PostgreSQL Configuration for Humans / Alvaro Hernandez (OnGres)
PostgreSQL Configuration for Humans / Alvaro Hernandez (OnGres)
 
Inexpensive Datamasking for MySQL with ProxySQL — Data Anonymization for Deve...
Inexpensive Datamasking for MySQL with ProxySQL — Data Anonymization for Deve...Inexpensive Datamasking for MySQL with ProxySQL — Data Anonymization for Deve...
Inexpensive Datamasking for MySQL with ProxySQL — Data Anonymization for Deve...
 
Опыт разработки модуля межсетевого экранирования для MySQL / Олег Брославский...
Опыт разработки модуля межсетевого экранирования для MySQL / Олег Брославский...Опыт разработки модуля межсетевого экранирования для MySQL / Олег Брославский...
Опыт разработки модуля межсетевого экранирования для MySQL / Олег Брославский...
 
ProxySQL Use Case Scenarios / Alkin Tezuysal (Percona)
ProxySQL Use Case Scenarios / Alkin Tezuysal (Percona)ProxySQL Use Case Scenarios / Alkin Tezuysal (Percona)
ProxySQL Use Case Scenarios / Alkin Tezuysal (Percona)
 
MySQL Replication — Advanced Features / Петр Зайцев (Percona)
MySQL Replication — Advanced Features / Петр Зайцев (Percona)MySQL Replication — Advanced Features / Петр Зайцев (Percona)
MySQL Replication — Advanced Features / Петр Зайцев (Percona)
 
Внутренний open-source. Как разрабатывать мобильное приложение большим количе...
Внутренний open-source. Как разрабатывать мобильное приложение большим количе...Внутренний open-source. Как разрабатывать мобильное приложение большим количе...
Внутренний open-source. Как разрабатывать мобильное приложение большим количе...
 
Подробно о том, как Causal Consistency реализовано в MongoDB / Михаил Тюленев...
Подробно о том, как Causal Consistency реализовано в MongoDB / Михаил Тюленев...Подробно о том, как Causal Consistency реализовано в MongoDB / Михаил Тюленев...
Подробно о том, как Causal Consistency реализовано в MongoDB / Михаил Тюленев...
 
Балансировка на скорости проводов. Без ASIC, без ограничений. Решения NFWare ...
Балансировка на скорости проводов. Без ASIC, без ограничений. Решения NFWare ...Балансировка на скорости проводов. Без ASIC, без ограничений. Решения NFWare ...
Балансировка на скорости проводов. Без ASIC, без ограничений. Решения NFWare ...
 
Перехват трафика — мифы и реальность / Евгений Усков (Qrator Labs)
Перехват трафика — мифы и реальность / Евгений Усков (Qrator Labs)Перехват трафика — мифы и реальность / Евгений Усков (Qrator Labs)
Перехват трафика — мифы и реальность / Евгений Усков (Qrator Labs)
 
И тогда наверняка вдруг запляшут облака! / Алексей Сушков (ПЕТЕР-СЕРВИС)
И тогда наверняка вдруг запляшут облака! / Алексей Сушков (ПЕТЕР-СЕРВИС)И тогда наверняка вдруг запляшут облака! / Алексей Сушков (ПЕТЕР-СЕРВИС)
И тогда наверняка вдруг запляшут облака! / Алексей Сушков (ПЕТЕР-СЕРВИС)
 
Как мы заставили Druid работать в Одноклассниках / Юрий Невиницин (OK.RU)
Как мы заставили Druid работать в Одноклассниках / Юрий Невиницин (OK.RU)Как мы заставили Druid работать в Одноклассниках / Юрий Невиницин (OK.RU)
Как мы заставили Druid работать в Одноклассниках / Юрий Невиницин (OK.RU)
 
Разгоняем ASP.NET Core / Илья Вербицкий (WebStoating s.r.o.)
Разгоняем ASP.NET Core / Илья Вербицкий (WebStoating s.r.o.)Разгоняем ASP.NET Core / Илья Вербицкий (WebStoating s.r.o.)
Разгоняем ASP.NET Core / Илья Вербицкий (WebStoating s.r.o.)
 
100500 способов кэширования в Oracle Database или как достичь максимальной ск...
100500 способов кэширования в Oracle Database или как достичь максимальной ск...100500 способов кэширования в Oracle Database или как достичь максимальной ск...
100500 способов кэширования в Oracle Database или как достичь максимальной ск...
 
Apache Ignite Persistence: зачем Persistence для In-Memory, и как он работает...
Apache Ignite Persistence: зачем Persistence для In-Memory, и как он работает...Apache Ignite Persistence: зачем Persistence для In-Memory, и как он работает...
Apache Ignite Persistence: зачем Persistence для In-Memory, и как он работает...
 
Механизмы мониторинга баз данных: взгляд изнутри / Дмитрий Еманов (Firebird P...
Механизмы мониторинга баз данных: взгляд изнутри / Дмитрий Еманов (Firebird P...Механизмы мониторинга баз данных: взгляд изнутри / Дмитрий Еманов (Firebird P...
Механизмы мониторинга баз данных: взгляд изнутри / Дмитрий Еманов (Firebird P...
 

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

  • 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. Buffer Pool MySQL, Percona Server, MariaDB ● Собственный кэш БД с 16KB страницами ● Вытеснение страниц по LRU ● Асинхронное (background) или синхронное вытеснение (блокируется поток запроса) ● Страница может быть в ● flush_list – список грязных страниц (нехватка места в redo log) ● LRU_list – список страниц, к которым был доступ (нехватка места в buffer pool)
  • 4. Потоки Вытеснения из Buffer Pool MySQL 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. LRU (Least Recently Used) ● В кэше только страницы, к которым недавно обращались ● Частота обращений не учитывается (нет истории) => При сканировании ведет себя очень плохо
  • 6. CAR/CART ● Clock with Adaptive Replacement (CAR) ● CAR with Temporal filtering (CART)
  • 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. 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. Репликация Galera (Database State Machine) и Локи ● Database State Machine: детерминированность переходов по состояниям разных нод кластера ● На rollback также задействован kernel_mutex
  • 10. Репликация Galera: сертификация ● 3 транзакции с одним primary key ● 4 rollback'а на всех нодах
  • 11. Гранулярность Латчей для Record и Table Locks ● Отдельные латчи для Table и Record локов ● N латчей для таблиц и M латчей для строк ● Латчи хранятся в хэш-таблице с индексом по: ● блоку (lock_rec_hash(space, page_no)) для record lock'ов (record lock'и сами хранятся в хэше, индексируемом блоком => один латч будет защищать один и тот же набор локов) ● по tablespace (innodb_file_per_table)
  • 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. Многопоточная Репликация: Galera ● wsrep_slave_threads — число slave потоков ● apply_cb() выполняется после сертификации, которая: ● захватывает монитор (local ordering) ● проверяет global seqno транзакции ● проверяет зависимость транзакций по primary keys ● wsrep_apply_cb() → wsrep_apply_rbr() → ev->apply_event()
  • 14. Многопоточная Асинхронная Репликация ● Нужны global transaction ID для async replication ● Поток slave_sql вместо исполнения эвентов, кладет их в очередь, разделяемую worker'ами ● Worker'ы конвертируют эвент в Galera writeset и передают его Galera Replicator'у