Я бы предположил, что какой-то другой процесс работает на том же хосте, что и база данных медленных подчиненных, и это ресурсы для hogging.
Попробуйте запустить «сверху» (или использовать Nagios или кактус или что-то еще), чтобы контролировать производительность системы на трех подчиненных серверах базы данных и посмотреть, есть ли какие-либо тенденции, которые вы можете наблюдать. Использование процессора связано с другим процессом, кроме mysqld, или I/O, постоянно насыщенным, что-то вроде этого.
обновление: Прочитайте следующие две статьи экспертов производительности MySQL Peter Zaitsev:
Автор указывает, что ведомый репликации одного -threaded, а подчиненный выполняет запросы последовательно, а не параллельно, поскольку они re выполняется на сервере. Поэтому, если у вас есть несколько реплицированных запросов, которые очень долго работают, они могут «задержать очередь».
Он предлагает исправить это, чтобы упростить длительные SQL-запросы, чтобы они работали быстрее. Например:
Если у вас есть обновление, которое затрагивает миллионы строк, разбить его на несколько обновлений, которые действуют на подмножества строк.
Если у вас есть сложные операторы SELECT, включенные в ваши запросы UPDATE или INSERT, отделите SELECT в свой собственный оператор, сгенерируйте набор буквенных значений в коде приложения, а затем запустите UPDATE или INSERT. Конечно, SELECT не будет реплицироваться, ведомый будет видеть только UPDATE/INSERT с литеральными значениями.
Если у вас длительное запущенное пакетное задание, это может блокировать выполнение других обновлений на ведомом устройстве. Вы можете поместить некоторые спячки в пакетное задание или даже написать пакетное задание, чтобы проверить отставание репликации с интервалом и спать, если это необходимо.
не так часто, может быть один раз несколько часов ... – omg
Хорошо, так что это спорадически, и серверы чередуются медленно. Остается вопрос: что еще работает на этих серверах, которые могут потреблять ресурсы? –
В базе данных ведомых ничего больше не работает на себе – omg