Короче говоря, нецелесообразно запускать ресурсы на общем сервере.
В принципе, если вы уделите достаточно времени другим процессам, это не так уж плохо. Тем не менее, пикирование процессора, как вы обсуждаете, является плохим и не очень приятным для других пользователей системы. У вас должен быть механизм доходности в вашем основном цикле (например, usleep(100)
) и выполнить команду с высоким номером nice
, например 19.
Кроме того, похоже, что вы выполняете индивидуальные вставки/обновления/etc в своей партии сценарий обработки. С помощью mysql намного лучше использовать пакетные вставки, когда это возможно (очень быстро по сравнению с отдельными). В зависимости от того, как вы это делаете, это может быть компромиссом с ОЗУ для времени процессора (например, если вы сохраняете все значения вставки в строке до тех пор, пока их готовые к вставке с помощью одного оператора insert, то это может добавить до большого количества оперативной памяти). Если ОЗУ является проблемой, вы всегда можете создать временный файл SQL, а затем импортировать все это в конце процесса.
Пакетный вставка выглядит примерно так (для таблицы с двумя столбцами VARCHAR):
INSERT INTO `mytable` VALUES ('Field 1-Row 1', 'Field 2-Row 1'), ('Field 1-Row 2', 'Field 2-Row 2');
Эта вставка будет две строки сразу на долю времени.
Но опять же, основываясь на том, что вы называете целью сценария, вы, вероятно, не делаете много вставок для начала. Но, может быть, вы все равно можете собрать все (или многие) из ваших обновлений/вставок/удалений БД в окончательный сценарий, который называется в конце?
Кроме того, если вы уверены, что можете сохранить свои внешние ключи в правильном порядке, делая импорт, то проверка внешних ключей может значительно улучшить скорость.
Все другие возможные варианты могут быть основаны на конкретной оптимизации вашего кода и схемы БД (оптимизация циклов, поисковых запросов, индексов и т. Д.).
Что я сильно подразумевающее здесь является то, что вы можете сделать что-то подобное в хостинге без коробления ресурсов, но ваша структура БД, SQL заявление и алгоритмы (циклы, и т.д.) должны быть оптимизированы. Если вы это сделаете, дополнительное преимущество в том, что ваш процесс также завершится очень быстро. Существует распространенная ошибочная концепция: php + mysql = slow/cpu hog, но в 99% случаев это проблема программирования или дизайна БД. Они должны легко иметь возможность обрабатывать многие записи.
Если вы идете на совместный хостинг, можете ли вы сообщить нам, какой из них выбрать - чтобы мы могли его избежать ...или знаете причину внезапного падения производительности нашего хоста ;-) – BrynJ
Итак, мне пришла в голову мысль ... Если вы не правильно указали свои индексы (весь новый разговор), почему вы проходите половину миллион записей, чтобы определить статус, который обрабатывается/очищается в определенный момент? Почему у вас нет другой таблицы, которая специально для статуса? Изменения статуса пользователя => вставить запись в таблицу состояния => процесс собирает все состояния => обрабатывать все состояния => удаляет все статусы. Это то, что происходит? –
@BrynJ - Это совсем не то, что они говорят. Они спрашивают, нормально ли запускать ресурсы на общем хосте. Ответ не зависит от мощности хоста. –