Mysqldump на RDS Read Replaa Slave работает в 50 раз медленнее - PullRequest
0 голосов
/ 19 сентября 2019

Я создал реплику для чтения моей базы данных MySQL на amazon RDS.

При выполнении следующей команды она работает очень быстро (полсекунды) на ведущем устройстве, но на 30 секунд занимаетраб.Очень раздражает, потому что я хотел избавиться от раба, чтобы не замедлять мастер.

mysqldump --set-gtid-purged=OFF -h myDomain.com -u dev -pmyPassword mySchema > out.sql

1 Ответ

1 голос
/ 19 сентября 2019

Необходимо рассмотреть три проблемы.

Наиболее важным является то, что mysqldump не работает хорошо при запуске на расстоянии от базы данных из-за ограничений в традиционном проводном протоколе клиент / сервер MySQL,который не учитывает конвейеризацию ряда команд.

Утилита mysqldump не использует магию для создания файлов дампа - она ​​выдает операторы SQL на сервер и принимает результаты этих запросов для генерации своего вывода.

В результатеДля каждого отдельного объекта (схемы, таблицы, представления, хранимой функции / процедуры, события) в базе данных требуется как минимум один прием в оба конца, а иногда и более одного.

Для каждой таблицы mysqldump первый выпуск SHOW CREATE TABLE t1;сопровождаемый SELECT * FROM t1; ... таким образом, время прохождения туда и обратно 100 мс будет означать, что извлечение файла дампа из 150 таблиц будет означать, что 150 × 2 × 0,100 = 30 секунд будут просто потрачены на расстояние между машиной, на которой работает mysqldump исервер - и это верно, даже если таблицы полностью пусты.

Это не рекомендация, но вы можете взглянуть на mydumper , которыйутверждает, что имеет возможность создания резервной копии, используя несколько соединений с базой данных, параллельно, и это может помочь избежать потери циклов, когда команды передаются на сервер и возвращаютсяn клиенту, распараллеливая процесс дампа.Я не знаю качество этой кодовой базы, но что-то вроде этого может помочь.


Далее, вы почти всегда хотите использовать опцию --compress для mysqldump.Вопреки тому, что вы можете предположить, этот не сжимает файл резервной копии.Созданный файл резервной копии идентичен при использовании этой опции, но когда эта функция активирована, сервер сжимает данные, которые он отправляет в mysqldump по проводам, и mysqldump снова распаковывает данные перед их записью - так что этоЭта опция почти всегда будет способствовать более быстрому процессу, если только машина, на которой работает mysqldump, и сервер базы данных не соединены сетью с низкой задержкой и высокой пропускной способностью.Поскольку сгенерированный файл идентичен, при использовании этой опции не возникает проблем совместимости.


Наконец, существует проблема со вновь созданными RDS-серверами, о которой вам необходимо знать, так что она не 'искажать ваши критерии.Когда вы создаете реплику RDS, она первоначально заполняется данными из моментального снимка ведущего устройства.Это закулисный снимок EBS жесткого диска мастера, а новый экземпляр базы данных поддерживается томом EBS, восстановленным из этого снимка.Тома EBS лениво загружаются из моментального снимка, поэтому у них есть задокументированное наказание за первое касание.Эта проблема может оказать существенное влияние на производительность первой полной резервной копии, но после этого не окажет существенного влияния.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...