Восстановление резервной копии MYSQL происходит очень медленно

я восстанавливаю файл дампа mysql 26 ГБ на 16 ГБ ОЗУ MySQL, работающем на MacOS.

сначала я попытался восстановить резервную копию MySQL, как это

mysql -ufoo -pbar foo < foo.dump

Это разбился mySQL, потому что foo.дамп содержит много очень забавных международных символов, и приведенная выше команда не заботится о кодировках.

Так я пробовал

mysql -uroot -p --default-character-set=utf8 foo
mysql> SET names 'utf8'
mysql> SOURCE foo.dump

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

но теперь процесс восстановления очень медленный. Для файла размером 26 ГБ он работает в течение всей ночи (одна таблица, которая имеет 40 миллионов строк, является виновником). Я вижу, что он восстанавливает примерно 3000 строк каждые 15 секунд. Но с такой скоростью процесс восстановления займет вечность.

итак, есть ли способ быстро восстановить файл дампа и не испортить кодировки?

30
задан Knows Not Much
28.01.2023 3:05 Количество просмотров материала 2819
Распечатать страницу

1 ответ

ваш процесс медленный из-за тяжелого диска I/O действия для операций SQL. Необходимо оптимизировать innodb для интенсивных операций. Измените свой файл конфигурации mysql, чтобы иметь эти строки:

innodb_buffer_pool_size = 4G
innodb_log_buffer_size = 256M
innodb_log_file_size = 1G
innodb_write_io_threads = 16

значение параметра innodb_buffer_pool_size: область памяти, где InnoDB кэширует табличные и индексные данные. Когда табличные данные кэшируются в пуле буферов InnoDB, к ним можно обратиться повторно запросами, не требуя, чтобы любые дисковые изменения данных ввода-вывода кэшировались, а не сразу запись на диск.

больший пул буферов требует меньше дисковых операций ввода-вывода для доступа к одним и тем же табличным данным более одного раза. На выделенном сервере баз данных можно задать пул буферов размером 80% от объема физической памяти компьютера, иначе использовать 50 to 75 процент системной памяти. Размер пула буферов по умолчанию составляет 128 МБ

innodb_log_buffer_size: размер в байтах буфера, который InnoDB использует для записи в log файлы на диск.

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

innodb_log_file_size: размер в байтах каждого файла журнала в группе журнала. Большой размер гарантирует, что сервер может сглаживать пики и спады активности рабочей нагрузки, что часто означает, что имеется достаточно места для журнала повторных операций для обработки более часа деятельности при записи. Чем больше значение, тем меньше активности сброса контрольных точек требуется в буферном пуле, сохраняя дисковый ввод-вывод

Innodb_write_io_threads: количество потоков ввода/вывода для операций записи в InnoDB. Значение по умолчанию-4. InnoDB использует фоновые потоки для обслуживания различных типов запросов ввода-вывода. . Можно настроить количество фоновых потоков, которые обслуживают чтение и запись ввода-вывода на страницах данных с помощью innodb_read_io_threads и innodb_write_io_threads параметр конфигурации.

эти параметры означают количество фоновых потоков для запросов на чтение и запись соответственно. Каждый фоновый поток может обрабатывать до 256 ожидающих запросов ввода-вывода.

0
отвечен Ben Njeri 2023-01-29 10:53

Постоянная ссылка на данную страницу: [ Скопировать ссылку | Сгенерировать QR-код ]

Ваш ответ

Опубликуйте как Гость или авторизуйтесь

Имя
Вверх