20.7.5 Фрагментация сообщений
Когда между членами группы репликации отправляется аномально большое сообщение, некоторые члены могут быть отмечены как неисправные и исключены из группы. Это происходит потому, что единственная нить, используемая движком межгрупповой коммуникации Group Replication (XCom, вариант Paxos), слишком долго обрабатывает сообщение, поэтому некоторые члены группы могут сообщить о получателе как о неисправном. По умолчанию большие сообщения автоматически разбиваются на фрагменты, которые отправляются по отдельности и собираются получателями.
Переменная системы group_replication_communication_max_message_size определяет максимальный размер сообщения для коммуникаций Group Replication, при превышении которого сообщения фрагментируются. По умолчанию максимальный размер сообщения составляет 10485760 байт (10 МБ). Максимально допустимое значение равно максимальному значению переменной системы replica_max_allowed_packet (1 ГБ). group_replication_communication_max_message_size должно быть меньше, чем replica_max_allowed_packet, так как нить прикладного процесса не может обрабатывать фрагменты сообщений, превышающие максимальный разрешенный размер пакета. Чтобы отключить фрагментацию, задайте нулевое значение для group_replication_communication_max_message_size.
Как и большинство других переменных системы Group Replication, для вступления изменений в силу необходимо перезапустить плагин Group Replication. Например:
STOP GROUP_REPLICATION;
SET GLOBAL group_replication_communication_max_message_size= 5242880;
START GROUP_REPLICATION;
Доставку фрагментированного сообщения считается завершенной, когда все фрагменты сообщения были получены и собраны всеми членами группы. Фрагментированные сообщения содержат в своих заголовках информацию, которая позволяет члену, присоединившемуся во время передачи сообщения, восстановить предыдущие фрагменты, отправленные до его присоединения. Если присоединившийся член не может восстановить фрагменты, он исключает себя из группы.
Используемая группой версия протокола связи Group Replication должна допускать фрагментацию. Вы можете получить используемый протокол связи группы, используя group_replication_get_communication_protocol(), которая возвращает самую старую версию MySQL Server, поддерживаемую группой. При необходимости используйте group_replication_set_communication_protocol(), чтобы установить версию протокола связи достаточно высокой (8.0.16 или выше), чтобы разрешить фрагментацию. Более подробная информация приведена в разделе 20.5.1.4 «Устанавливая версию протокола связи группы».
Если группа репликации не может использовать фрагментацию из-за того, что некоторые члены ее не поддерживают, можно использовать переменную системы group_replication_transaction_size_limit для ограничения максимального размера транзакций, принимаемых группой. Транзакции размером выше этого значения откатываются. Также можно использовать group_replication_member_expel_timeout для предоставления дополнительного времени (до часа) до исключения члена из группы, подозреваемого в неисправности.
© 2025 Oracle
Licensed under the GPLv2 License.