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

Ограничить ЦП одного процесса MYSQL

Это относительно простой вопрос, на который, надеюсь, есть простой ответ. Всемогущий Google пока что не очень помогает в этом вопросе.

Я веду довольно активный бизнес веб-хостинга. У меня есть клиент, который импортирует довольно большую базу данных (преобразование vbulletin в ipb ~ 4gb), которая использует PHP-скрипт для получения всего из базы данных vbulletin и вставляет его в программное обеспечение ipb.

Это существенно повреждает мой сервер во время его работы.

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

Любые идеи?

Вы можете использовать [re] nice для настройки приоритета процесса - это не будет «ограничивать» вещи как таковые, но позволит продолжить выполнение других операций на сервере. Команда renice изменит приоритет запущенного процесса. От man renice "Полезные приоритеты: 20 (затронутые процессы будут запускаться только тогда, когда ничто другое в системе не захочет), 0 (" базовый "приоритет планирования), любые отрицательный (чтобы все пошло очень быстро) ".

renice N PID

например: renice +5 987 это сделает процесс 987 менее благоприятным для планирования.

Изменить: я бы не стал изменять ваш серверный процесс mysql, поскольку это, безусловно, повлияет на других пользователей - найдите клиентский процесс mysql и замените его.

Если речь идет о процессоре, попробуйте cpulimit. cpulimit - это простая программа, которая пытается ограничить использование процессора процессом.

Ссылаться на

http://webupd8.blogspot.com/2009/05/limit-cpu-usage-by-process-linux.html

или

http://www.cyberciti.biz/faq/cpu-usage-limiter-for-linux/

надеюсь, это поможет

Команда, которую вы ищете, хороша.

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

  • Количество запросов, которые аккаунт может отправлять в час.
  • Количество обновлений, которые аккаунт может выпускать в час.
  • Количество раз, когда учетная запись может подключаться к серверу в час
  • Количество одновременных подключений к серверу, которое может иметь учетная запись (начиная с MySQL 5.0.3)

«Хороший» - это хорошо знать, как предлагали другие.

Но вот в чем дело: если вы "хороши" что-либо, кроме самого сервера mysql, все вставки будут выполняться с приоритетом Mysql, который довольно высок.

Например, если "хороший" php-скрипт генерирует массивный оператор INSERT с низким приоритетом, а затем отправляет его на сервер mysql, сервер mysql выполнит эту вставку в своем типичном высокоприоритетном режиме независимо от "удобства" PHP. сценарий. Это связано с тем, что сервер Mysql - это отдельный процесс со своими особенностями и PRI.

С другой стороны, если вы "хорошо" настроите сам сервер mysql, все операции с БД будут работать медленнее. Не хорошо, как указано в других ответах.

Мне кажется, что лучшим решением будет попросить этого клиента настроить его PHP-скрипт для вставки небольшими фрагментами (по циклу) и сказать ему, чтобы он помещал операторы sleep () внутрь цикла. Вставки будут иметь полный приоритет, но они будут управляемыми по размеру, а затем оператор сна должен позволить другому процессу работать и дать базе данных шанс наверстать упущенное.

Если вы придирчивы к использованию ОЗУ, вы можете попросить клиента «сбросить» ненужные переменные непосредственно перед оператором сна.

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

Nice хорош тем, что позволяет процессу использовать только неиспользуемые ресурсы. Если вы действительно хотите ограничить его дальше, возможно, вы ищете ulimit для пользователя сервера web / db.

Редактировать: в конце концов, это может быть не такой уж и хорошей идеей. Я думаю, что установка ulimit приведет к тому, что процессы будут убит если они превышают лимиты.

Возможно, стоит подумать об этом в будущем - виртуализации.

Если вы используете что-то вроде OpenVZ или VServer, вы можете ограничить количество процессорного времени, потребляемого каждым виртуальным сервером. Вы можете создать виртуальный сервер, который просто запускает MySQL, а затем ограничить его. В остальном особо не меняется.

Извини за поздний ответ :)

Вот ваше решение: http://docs.redhat.com/docs/en-US/Red_Hat_Enterprise_Linux/6/html/Resource_Management_Guide/ch01.html

э.и. Использовать функцию контрольных групп (cgroups)