19.5.1.20 Репликация и max_allowed_packet
max_allowed_packet устанавливает верхний предел размера любого отдельного сообщения между сервером MySQL и клиентами, включая реплики. Если вы реплицируете значения больших столбцов (такие, как могут быть найдены в TEXT или BLOB столбцах) и max_allowed_packet слишком мал на источнике, источник терпит ошибку, и реплика завершает поток репликации I/O (приёмник). Если max_allowed_packet слишком мал на реплике, это также приводит к остановке потока I/O реплики.
Репликация на основе строк отправляет все столбцы и значения столбцов для обновленных строк с источника на реплику, включая значения столбцов, которые фактически не были изменены обновлением. Это означает, что при репликации больших значений столбцов с помощью репликации на основе строк, необходимо убедиться, что max_allowed_packet достаточно велик, чтобы вместить самую большую строку в любой таблице, подлежащей репликации, даже если вы реплицируете только обновления или вставляете только относительно небольшие значения.
На многопотоковой реплике (с replica_parallel_workers >
0) убедитесь, что системная переменная replica_pending_jobs_size_max установлена в значение, равное или большее, чем значение для переменной max_allowed_packet на источнике. Значение по умолчанию для replica_pending_jobs_size_max, 128М, вдвое превышает значение по умолчанию для max_allowed_packet, которое составляет 64М. max_allowed_packet ограничивает размер пакета, который может отправлять источник, но добавление заголовка события может привести к тому, что событие бинарного журнала превысит этот размер. Кроме того, в репликации на основе строк одно событие может быть значительно больше, чем размер max_allowed_packet, потому что значение max_allowed_packet ограничивает только каждый столбец таблицы.
Реплика фактически принимает пакеты до предела, установленного её настройкой replica_max_allowed_packet, которая по умолчанию устанавливается в максимальное значение 1 ГБ, чтобы предотвратить сбой репликации из-за большого пакета. Однако значение replica_pending_jobs_size_max управляет памятью, которая предоставляется на реплике для хранения входящих пакетов. Указанная память разделяется между всеми очередями рабочих процессов реплики.
Значение replica_pending_jobs_size_max является мягким ограничением, и если необычно большое событие (состоящее из одного или нескольких пакетов) превышает этот размер, транзакция удерживается до тех пор, пока все рабочие процессы реплики не очистят свои очереди, а затем обрабатывается. Все последующие транзакции удерживаются до завершения большой транзакции. Таким образом, хотя необычные события, превышающие replica_pending_jobs_size_max, могут быть обработаны, задержка для очистки очередей всех рабочих процессов реплики и ожидание для очереди последующих транзакций могут привести к замедлению реплики и снижению конкуретности рабочих процессов реплики. replica_pending_jobs_size_max следует установить достаточно высоким, чтобы вместить большинство ожидаемых размеров событий.
© 2025 Oracle
Licensed under the GPLv2 License.