19.5.1.21 Репликация и max_allowed_packet
max_allowed_packet устанавливает максимальный размер любого отдельного сообщения между сервером MySQL и клиентами, включая реплики. Если вы реплицируете большие значения столбцов (такие, как можно найти в TEXT или BLOB столбцах), а max_allowed_packet слишком мал на источнике, источник завершается с ошибкой, и реплика останавливает поток ввода-вывода репликации (приемник). Если max_allowed_packet слишком мал на реплике, это также заставляет реплику остановить поток ввода-вывода.
Репликация на основе строк отправляет все столбцы и значения столбцов для обновленных строк от источника к реплике, включая значения столбцов, которые фактически не были изменены обновлением. Это означает, что при репликации больших значений столбцов с использованием репликации на основе строк, вы должны позаботиться о том, чтобы 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.