Я работаю с большой базой данных (некоторые таблицы 500000000+ строк). Каждый день следует заменять 3-10 миллионов строк, а каждый импорт составляет около 1 миллиона строк (то есть 3-10 раз в день с CRON) с использованием LOAD DATA INFILE. Проблема в том, что при импорте таких больших файлов MySQL потребляет 80% процессора, и все обычные запросы, идущие с веб-сайта, становятся очень медленными или производительность веб-сайта падает. Сайт работает на сервере Amazon EC2 Windows 2008. Кто-нибудь знает, как решить эту проблему в одном экземпляре EC2 (без разделения базы данных) Спасибо.
Как сохранить производительность MYSQL при импорте больших файлов данных с помощью LOAD DATA INFILE?
Ответы (2)
Быстрый и грязный хак... Как насчет разделения исходных файлов на более мелкие загрузки, которые затем хронируются как операция загрузки БД с 5-минутным перерывом между каждой загрузкой? Управление 10 миллионами записей за раз приведет к истощению многих ресурсов сервера и БД и, следовательно, к сбою. Использование нагрузки всего 50-100 КБ может быть не так уж плохо, если у вас большой сервер с большим объемом памяти.
person
Simon at LabSlice-com
schedule
11.01.2011
дистрибуция кажется подходящим вариантом (вот как работает facebook)
не уверен, что является рациональным для вас, чтобы не делать этого, бюджетные ограничения?
другие возможные подходы
- отказаться от использования окон — ограничение окон
- настроить репликацию mysql
- во время импорта через cron предотвратить все обращения к мастеру и наоборот. после завершения импорта (что-то вроде установки двух файлов флагов, если главный флаг существует, используйте подчиненный, если файл подчиненного флага существует, используйте главный, оба не существуют, тогда оба могут быть запрошены)
- рассмотреть раздел?
- отбросить все индексы (нести последствия)
во многом зависит от использования вашей базы данных, если это не критично, сделайте автономный импорт очень подходящим
person
ajreal
schedule
11.01.2011