Назад | Перейти на главную страницу

Как ускорить импорт MySQL

Я опубликовал связанный вопрос на askubuntu.com, но это может быть лучшим местом и способом задать вопрос.

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

Я установил базу данных MySQL как символическую ссылку на виртуальный диск, который я установил с помощью ramfs, что похоже на версию без кеширования tmpfs. Несмотря на разницу в производительности между жестким диском и оперативной памятью, я все еще вижу только 40-190 QPS.

Стол innodb.

Как мне ускорить импорт?

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

  1. Это не рабочий сервер
  2. У меня есть система сброса RAM-диска на диск, и я приложил все усилия, чтобы настроить ее так, чтобы я мог делать это по своему желанию.
  3. Моя цель - иметь возможность импортировать более 8 миллионов записей в разумные сроки. Было бы неплохо, если бы меньше недели - это та производительность, которую я получал при установке MySQL по умолчанию.

это обычно не то, как вы настраиваете базу данных. MySQL выполняет собственное кэширование в памяти. Идеально было бы настроить MySQL с большим объемом памяти, чтобы он мог кэшировать индексы таблиц в память, это ускорит поиск и увеличит количество запросов в секунду.

НО, если у вас есть SQL, который не оптимизирован и правильно использует индексы, вы не сможете увеличить QPS, даже с более быстрыми дисками, поскольку в вашем случае более быстрые диски - это ram fs.

Пара замечаний с вашей стороны,

  1. Как устроены мои таблицы?
  2. НЕТ !!! -> SELECT * FROM ... <- убивает производительность
  3. Есть ли у меня правильные индексы
  4. Мои занятые столы на отдельных дисковых томах
  5. BINLOGS на отдельном томе диска, INNODB на отдельном томе диска
  6. VARCHARS = ПЛОХОЙ ДИЗАЙН

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