Как сохранить производительность MYSQL при импорте больших файлов данных с помощью LOAD DATA INFILE? - PullRequest
2 голосов
/ 11 января 2011

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

Ответы [ 2 ]

1 голос
/ 11 января 2011

распространение похоже на путь (вот как Facebook делает вещи)

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

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

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

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

1 голос
/ 11 января 2011

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

...