Как сохранить производительность MYSQL при импорте больших файлов данных с помощью LOAD DATA INFILE?

Я работаю с большой базой данных (некоторые таблицы 500000000+ строк). Каждый день следует заменять 3-10 миллионов строк, а каждый импорт составляет около 1 миллиона строк (то есть 3-10 раз в день с CRON) с использованием LOAD DATA INFILE. Проблема в том, что при импорте таких больших файлов MySQL потребляет 80% процессора, и все обычные запросы, идущие с веб-сайта, становятся очень медленными или производительность веб-сайта падает. Сайт работает на сервере Amazon EC2 Windows 2008. Кто-нибудь знает, как решить эту проблему в одном экземпляре EC2 (без разделения базы данных) Спасибо.


person kami    schedule 10.01.2011    source источник


Ответы (2)


Быстрый и грязный хак... Как насчет разделения исходных файлов на более мелкие загрузки, которые затем хронируются как операция загрузки БД с 5-минутным перерывом между каждой загрузкой? Управление 10 миллионами записей за раз приведет к истощению многих ресурсов сервера и БД и, следовательно, к сбою. Использование нагрузки всего 50-100 КБ может быть не так уж плохо, если у вас большой сервер с большим объемом памяти.

person Simon at LabSlice-com    schedule 11.01.2011

дистрибуция кажется подходящим вариантом (вот как работает facebook)

не уверен, что является рациональным для вас, чтобы не делать этого, бюджетные ограничения?

другие возможные подходы

  • отказаться от использования оконограничение окон
  • настроить репликацию mysql
  • во время импорта через cron предотвратить все обращения к мастеру и наоборот. после завершения импорта (что-то вроде установки двух файлов флагов, если главный флаг существует, используйте подчиненный, если файл подчиненного флага существует, используйте главный, оба не существуют, тогда оба могут быть запрошены)
  • рассмотреть раздел?
  • отбросить все индексы (нести последствия)

во многом зависит от использования вашей базы данных, если это не критично, сделайте автономный импорт очень подходящим

person ajreal    schedule 11.01.2011