Spec-Zone.ru › MariaDB

MyRocks и репликация

Подробности о том, как MyRocks работает с репликацией.

MyRocks и репликация на основе операторов

Репликация на основе операторов (SBR) работает следующим образом: операторы SQL выполняются на мастер-сервере (возможно, параллельно). Они записываются в журнал бинарных логов (это фиксирует их порядок, «сериализация»). Затем раб-сервер считывает журнал бинарных логов и выполняет операторы в соответствии с порядком в журнале.

Для предотвращения смещения данных последовательное выполнение операторов на раб-сервере должно давать тот же результат, что и параллельное выполнение этих операторов на мастер-сервере. Другими словами, уровень изоляции транзакций на мастер-сервере должен быть близок к SERIALIZABLE уровню изоляции транзакций (Это не строгое математическое доказательство, а демонстрация идеи).

InnoDB достигает этого, (почти) поддерживая SERIALIZABLE уровень изоляции транзакций. Это делается с помощью «блокировок разрывов» (Gap Locks). MyRocks не поддерживает SERIALIZABLE изоляцию, и он не поддерживает блокировки разрывов.

Из-за этого, как правило, нельзя использовать MyRocks и репликацию на основе операторов.

Обновление таблицы MyRocks при включённой SBR приведёт к ошибке следующего вида:

ERROR 4056 (HY000): Can't execute updates on master with binlog_format != ROW.

Можно ли всё ещё использовать SBR с MyRocks?

Да. Во многих случаях базы данных работают со строгим набором операторов SQL, и можно доказать, что отсутствие поддержки блокировок разрывов не является проблемой, и искажения данных не произойдёт.

В этом случае можно установить @@rocksdb_unsafe_for_binlog=1 и MyRocks будет работать с SBR. Однако пользователь несёт ответственность за обеспечение того, чтобы его запросы не приводили к искажению данных.

Раб-сервер без чтения

TODO

Отличия от MyRocks из исходного кода

MyRocks из исходного кода (то есть, ветка MySQL Facebook) имеет ряд уникальных улучшений репликации. Они доступны в версии MyRocks из исходного кода, но не в версии MyRocks от MariaDB.

  • Репликация без чтения (см. https://github.com/facebook/mysql-5.6/wiki/Read-Free-Replication) TODO
  • <<unique_check_lag_threshold>>. Это функция FB/MySQL-5.6, где уникальные проверки отключаются, если задержка репликации превышает определённый порог.
  • <<slave_gtid_info=OPTIMIZED>>. Говорится, что это:
<<quote>>
"Whether SQL threads update mysql.slave_gtid_info table. If this value "
"is OPTIMIZED, updating the table is done inside storage engines to "
"avoid MySQL layer's performance overhead",
<</quote>>
Содержимое, воспроизводимое на этом сайте, является собственностью соответствующих владельцев, и это содержание не проверяется предварительно MariaDB. Мнения, информация и мнения, выраженные в этом содержимом, не обязательно отражают взгляды MariaDB или любой другой стороны.

© 2023 MariaDB
Licensed under the Creative Commons Attribution 3.0 Unported License and the GNU Free Documentation License.
https://mariadb.com/kb/en/myrocks-and-replication/

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API