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

Работа с заданиями cron и конфликтом между MySQL и ЦП в архитектуре одного выделенного сервера

У нас есть один небольшой экземпляр EC2, на котором мы запускаем интерфейсный сервер (php5-fpm / nginx), но также много загружаемых скриптов cron php, вставляющих много данных (2k + строк каждые ~ 15 минут), которые, кажется, полностью зависают Сервер MySQL на 1-2 минуты, сбой интерфейсного веб-сайта (время ожидания истекло).

Я думаю, что использование главного и подчиненного (только для чтения, для внешнего интерфейса) серверов MySQL может исправить это (?), Но я ограничен одним экземпляром для этого проекта.

Я уже настроил конфигурацию MySQL с mysqltuner и установите для вставок низкий приоритет.

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

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

Я думаю, что innodb - ваш лучший вариант. MyISAM выполняет блокировку на уровне таблицы, которая блокируется во время ваших обновлений. Подробная информация о блокировке MySQL

У меня также были смешанные результаты с экземплярами m1.small. Это дробное разделение ЦП, которое должно срабатывать, если соседи по комнате заняты. (проверьте vmstat на предмет кражи процессора). Вы можете ненадолго выполнить обновление до c1.medium. Типы инстансов EC2 Он имеет такой же размер оперативной памяти, что и небольшой, но в 5 раз больше ресурсов процессора. (вдвое дороже)

Два экземпляра MySQL на малом - плохая идея. (только один виртуальный ЦП)

Если вы хотите оставаться дешевым, попробуйте распределить эти 2000 записей на 15-минутное окно. (~ 200 минут)

Вы также не предоставили никаких подробностей о вашей памяти или настройках mysql. Ваш myisam_block_size 4k? Какой у вас MyISAM key_buffer? Вы смотрели настройку MyISAM concurrent_insert?

Ура.

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