У меня есть cronjob, который в основном не более чем mysqldump whatever | gzip > backup.sql.gz
. База данных довольно большая. Я заметил, что пока задание выполняется, мой apache гораздо менее отзывчив, использование процессора примерно такое
%CPU COMMAND
15.1 gzip
14.1 mysqld
13.1 mysqldump
Есть ли способ заставить эту работу использовать меньше ЦП, возможно, ценой того, что она займет больше времени?
ionice -c 3 nice mysqldump whatever | ionice -c 3 nice gzip > backup.sql.gz
Если ваше веб-приложение выполняет запись в «любую» базу данных, оно должно дождаться завершения mysqldump, поскольку по умолчанию оно блокирует таблицы. Если это так, и вы снизите приоритет, вы усугубите проблему.
Сначала выгрузите базу данных в виде обычного текста, затем запустите gzip, чтобы сжать файл. Таким образом, mysqldump может завершить работу раньше и снять блокировку, а MySQL и Apache смогут заниматься своими делами, пока работает gzip.
Ты можешь использовать отлично и Ренис изменить приоритет процессов. Это будет означать, что у них будет меньше доступа к процессору.
Вы, вероятно, не захотите изменять mysqld, но mysqldump и gzip могут безопасно изменить свои приоритеты.
Если у вас возникли проблемы с чрезмерным использованием диска, вы можете использовать ionice.