Справочник системных ошибок и решений

Windows Server, Active Directory, 1С:Предприятие, СУБД, Linux, Cisco, MikroTik, Asterisk.

⚠️ Важная информация Все материалы, инструкции, команды и скрипты на сайте предоставлены исключительно в ознакомительных целях. Их применение может повлиять на работу операционной системы, программного обеспечения, баз данных, сетевого оборудования и других компонентов инфраструктуры. Перед выполнением действий создайте резервную копию и по возможности протестируйте изменения в безопасной среде. Пользователь самостоятельно оценивает риски и несет ответственность за результат. При отсутствии необходимых знаний обратитесь к квалифицированному ИТ-специалисту.

MYSQL_REPL_LAG_HIGH Linux / DevOps

Траблшутинг задержек репликации MySQL: многопоточная репликация (MTS)

Обновлено: 21.08.2026
  • Параметр Seconds_Behind_Master в SHOW REPLICA STATUS постоянно растет и исчисляется часами.
  • SQL-поток реплики (Applier Thread) загружает только одно ядро CPU на 100%, не успевая за мастером.
  • Задержки чтения актуальных данных с Read-реплик клиентами приложения.

1. Диагностика причины отставания реплики

SHOW REPLICA STATUS\G
-- Анализ параметров:
-- Seconds_Behind_Master: секунды задержки
-- Last_SQL_Error: ошибки исполнения
-- Replica_SQL_Running_State: текущее состояние потока (например, Waiting for table metadata lock)

2. Включение многопоточной репликации (MTS) в MySQL 8.0

Переведите реплику в многопоточный режим параллельного применения транзакций (по логическим схемам или коммитам логических групп WRITESET):

STOP REPLICA;

-- Количество потоков применения (согласно числу CPU ядер, например 8)
SET GLOBAL replica_parallel_workers = 8;

-- Метод параллелизации: LOGICAL_CLOCK (по группам коммитов мастера)
SET GLOBAL replica_parallel_type = 'LOGICAL_CLOCK';

-- Сохранение порядка транзакций для консистентности
SET GLOBAL replica_preserve_commit_order = ON;

START REPLICA;

3. Конфигурация /etc/mysql/my.cnf для мастера и реплики

Настройки на Master (для генерации данных параллелизации):

[mysqld]
binlog_transaction_dependency_tracking = WRITESET
transaction_write_set_extraction = XXHASH64

Настройки на Slave:

[mysqld]
replica_parallel_workers = 8
replica_parallel_type = LOGICAL_CLOCK
replica_preserve_commit_order = ON

# Оптимизация дискового сброса для догона мастера
innodb_flush_log_at_trx_commit = 2
sync_binlog = 0

4. Мониторинг параллельных воркеров репликации

SELECT * FROM performance_schema.replication_applier_status_by_worker;
💡 Практика специалистов: Для ускорения нагона огромного отставания на Slave можно временно установить innodb_flush_log_at_trx_commit=2 и sync_binlog=0, что снизит нагрузку на диск по операциям fsync в десятки раз.

Частые вопросы (FAQ)

Что означает настройка WRITESET на мастере?

Она позволяет мастеру вычислять хеши изменяемых строк. Если две параллельные транзакции не пересекаются по строкам, реплика выполнит их одновременно в разных потоках, даже если они закоммичены в разное время.

Почему при наличии внешних ключей (Foreign Keys) репликация может тормозить?

Каскадные проверки внешних ключей вызывают блокировки строк и мешают параллельному выполнению воркеров MTS, принудительно сериализуя транзакции.

Полезные материалы
Рекомендуем