mysql.gtid_slave_pos Таблица
Таблица mysql.gtid_slave_pos используется в репликации серверами-репликаторами для отслеживания их текущей позиции (идентификатора глобальной транзакции последней применённой транзакции). Использование таблицы позволяет реплике поддерживать согласованное значение переменной gtid_slave_pos системы при перезапуске сервера. См. Идентификатор глобальной транзакции.
Никогда не пытайтесь изменять таблицу напрямую. Если вам нужно изменить значение глобальной переменной gtid_slave_pos, используйте SET GLOBAL gtid_slave_pos = ... вместо этого.
Таблица обновляется новой позицией как часть каждой завершённой транзакции во время репликации. Это делает предпочтительным использование того же движка хранения для таблицы, что и для других таблиц, которые изменяются в этой транзакции, так как иначе требуется многодвижковая транзакция, что может снизить производительность.
Начиная с MariaDB 10.3.1, поддерживаются несколько версий этой таблицы, каждая с использованием разного движка хранения. Это выбирается с помощью опции gtid_pos_auto_engines, указав список имён движков через запятую. Затем сервер по запросу создаёт дополнительную версию таблицы, используя соответствующий движок хранения, и выбирает версию таблицы, используя тот же движок, что и остальная часть транзакции, избегая многодвижковых транзакций.
Например, при gtid_pos_auto_engines=innodb,rocksdb, таблицы mysql.gtid_slave_pos_InnoDB и mysql.gtid_slave_pos_RocksDB будут созданы и использованы, если необходимо. Если нет соответствия движку хранения, будет использована стандартная таблица mysql.gtid_slave_pos; это также происходит при репликации не транзакционных обновлений (например, MyISAM), так как в момент обновления таблицы mysql.gtid_slave_pos активной транзакции нет.
До MariaDB 10.3.1 доступна только стандартная таблица mysql.gtid_slave_pos. В этих версиях таблица предпочтительно должна использовать движок хранения, который используется для большинства реплицированных транзакций.
Стандартная таблица mysql.gtid_slave_pos будет первоначально создана с использованием стандартного движка хранения, установленного для сервера (который по умолчанию InnoDB). Если нагрузка приложения в основном состоит из не транзакционных таблиц MyISAM или Aria, то изменение движка хранения может быть полезно для предотвращения включения обновления InnoDB при каждой операции:
ALTER TABLE mysql.gtid_slave_pos ENGINE=MyISAM;
Таблица mysql.gtid_slave_pos не должна изменяться вручную каким-либо иным способом. Начиная с MariaDB 10.3.1, предпочтительнее использовать переменную сервера gtid_pos_auto_engines для получения обновлений позиции GTID, чтобы использовать движки хранения TokuDB или RocksDB.
Обратите внимание, что по соображениям масштабируемости автоматическое создание новой таблицы mysql.gtid_slave_posXXX происходит асинхронно при подтверждении первой транзакции с новым движком хранения. Поэтому первые несколько транзакций будут обновлять старую версию таблицы, пока не будет создана и доступна новая версия.
Таблица mysql.gtid_slave_pos содержит следующие поля
| Поле | Тип | Null | Ключ | Значение по умолчанию | Описание |
|---|---|---|---|---|---|
domain_id |
int(10) unsigned |
NO | PRI | NULL |
Идентификатор домена (см. Идентификатор домена глобальной транзакции). |
sub_id |
bigint(20) unsigned |
NO | PRI | NULL |
Это поле позволяет несколько параллельных транзакций в пределах одного domain_id обновлять эту таблицу без конфликтов. В любой момент состояние репликации соответствует записям с наибольшим sub_id для каждого domain_id . |
server_id |
int(10) unsigned |
NO | NULL |
Идентификатор сервера. | |
seq_no |
bigint(20) unsigned |
NO | NULL |
Номер последовательности, целое число, монотонно возрастающее для каждой новой группы событий, записанных в бинарный журнал. |
Начиная с MariaDB 10.3.1, доступны некоторые переменные состояния для мониторинга использования различных версий таблицы gtid_slave_pos:
Transactions_gtid_foreign_engine
Количество реплицированных транзакций, где для обновления таблицы gtid_slave_pos пришлось выбрать движок хранения, который не участвовал в транзакции. Это может указывать на то, что настройка gtid_pos_auto_engines может быть полезной.
Количество реплицированных транзакций, которые включали изменения в нескольких (транзакционных) движках хранения, до учёта обновления gtid_slave_pos. Это транзакции, которые уже были междвижковые, независимо от обновления позиции GTID, введённого репликацией.
Количество транзакций, изменивших данные в нескольких (транзакционных) движках хранения. Если это значение существенно больше, чем Rpl_transactions_multi_engine, это указывает на то, что настройка gtid_pos_auto_engines может уменьшить необходимость междвижковых транзакций.
© 2023 MariaDB
Licensed under the Creative Commons Attribution 3.0 Unported License and the GNU Free Documentation License.
https://mariadb.com/kb/en/mysqlgtid_slave_pos-table/