Spec-Zone.ru › MariaDB

Репликация на основе строк без первичного ключа

В репликации исторически использовались термины мастер и слейв, но сейчас предпочтительны термины первичный и реплика. Старые термины всё ещё используются в некоторых частях документации и в командах MariaDB, хотя MariaDB 10.5 начала процесс переименования. Процесс документации продолжается. Следите за прогрессом этой работы на MDEV-18777.

MariaDB улучшает репликацию на основе строк (репликация) таблиц, у которых нет первичного ключа, но есть другие индексы. Это частично основано на исходном патче Percona «row_based_replication_without_primary_key.patch», с некоторыми дополнительными исправлениями и улучшениями.

При использовании репликации на основе строк с операциями UPDATE или DELETE, слейву необходимо найти каждую реплицированную строку на основе значения в столбцах. Если таблица содержит хотя бы один индекс, будет использоваться поиск по индексу (в противном случае для каждой строки требуется сканирование всей таблицы, что крайне неэффективно для всех таблиц, кроме самых маленьких, и обычно следует избегать).

В MariaDB слейв будет пытаться выбрать хороший индекс среди всех доступных:

  • Используется первичный ключ, если он есть.
  • В противном случае используется первый уникальный индекс без столбцов с NULL, если такой есть.
  • В противном случае выбирается любой обычный индекс в таблице (например, индекс FULLTEXT не рассматривается).

Выбор между несколькими неуникальными индексами основывается на кардинальности индексов; предпочтительнее тот, который наиболее селективен (имеет наименьшее среднее количество строк на каждый уникальный набор значений столбцов). Обратите внимание, что для эффективной работы этого выбора в большинстве движков хранения (например, MyISAM, InnoDB) необходимо убедиться, что на слейве выполнена операция ANALYZE TABLE, в противном случае информация о кардинальности индексов не будет доступна. При отсутствии данных о кардинальности индексов будет выбран первый уникальный индекс, если он есть, в противном случае — первый неуникальный индекс.

До MariaDB 5.3 слейв всегда выбирал первый индекс, не учитывая кардинальность. Слейв мог даже выбрать неприменимый индекс (например, FULLTEXT), если других индексов не было (MySQL Bug #58997), что приводило к сбою репликации на основе строк в этом случае; это также было исправлено в MariaDB 5.3.

См. также

  • Что такое MariaDB 5.3
Содержимое, воспроизведенное на этом сайте, является собственностью соответствующих владельцев, и это содержимое не предварительно проверяется компанией 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/row-based-replication-with-no-primary-key/

Spec-Zone.ru

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