У меня есть веб-сайт Wordpress с более чем 219 тыс. Сообщений, и каждый раз, когда я публикую что-то, мое использование ЦП / MySQL достигает 100%.
Я действительно не знаю почему, потому что весь мой веб-сайт остается на 6% использования весь день, и публикуются только всплески в новой публикации.
Да, я использую w3 super cache, но проблема в самом wp-admin! Я использовал mysqltuner для оптимизации MySQL ... Но, как я уже сказал, проблема возникает только при публикации нового сообщения.
Я использую два облака на Amazon AWS для размещения блога. Облако MySQL - это m1.medium а веб-сервер m1.xlarge.
Вот графика моего процессора, как вы можете видеть, у меня есть всплески одновременно в обоих облаках ... Эти всплески происходят точно в то время, когда я публикую новый пост. В зеленая линия - это MySQL и синяя линия - это веб-сервер.
Здесь вы можете увидеть график: http://i.stack.imgur.com/PReQP.png
Если никто не может мне помочь с этой ситуацией, пожалуйста, я хочу что-нибудь, чтобы «проверить» код ... Все тщательное изучение Wordpress настолько уродливо, что я не могу понять, как работают новые сообщения. Я хочу отлаживать запросы / функции или что-то в этом роде.
Спасибо!
У меня была аналогичная проблема со средним экземпляром, но в конечном итоге это была проблема с темой, которую я использовал. Измените тему на тему WP по умолчанию, чтобы увидеть, сохраняется ли проблема. В файле темы function.php была функция, которая не работала должным образом. Удаление функции устранило для меня проблему с публикацией.
Идея сужается, если проблема возникает из-за темы или даже плагина.
Пример: функция, которую мне пришлось исключить из темы, которую я использовал, была
// updates post id in sequential order by post date used for post page
function updateNumbers() {
global $wpdb;
$querystr = "SELECT $wpdb->posts.* FROM $wpdb->posts
WHERE $wpdb->posts.post_status = 'publish'
AND $wpdb->posts.post_type = 'post'
ORDER BY $wpdb->posts.post_date ASC";
$pageposts = $wpdb->get_results($querystr, OBJECT);
$counts = 0 ;
if ($pageposts):
foreach ($pageposts as $post):
$counts++;
add_post_meta($post->ID, 'incr_number', $counts, true);
update_post_meta($post->ID, 'incr_number', $counts);
endforeach;
endif;
}
Одним из плагинов, который вызывал проблемы после обновления до 4.2.4 на мультисайтах, был «Установщик». Серверная часть была очень медленной. Удаление этого плагина решило эту проблему.
Если предположить, что вы хорошо использовали mysqltuner, проблема может заключаться в оборудовании для хранения данных.
Предположительно ваш экземпляр MySQL сохраняет данные на томе EBS. Вы столкнулись как минимум с двумя проблемами:
Попробуйте измерить производительность файловой системы тома EBS, на котором хранятся ваши данные MySQL, используя что-то вроде iozone. Когда я сделал это несколько недель назад, производительность тома EBS, подключенного к небольшому экземпляру, была примерно половина так же хорошо, как один жесткий диск на моем ноутбук.
Вы можете улучшить производительность EBS, разделив несколько томов EBS в конфигурацию программного рейда.
http://www.mysqlperformanceblog.com/2009/08/06/ec2ebs-single-and-raid-volumes-io-bencmark/
http://dodizzle.com/setting-up-software-raid-zero-over-8-volumes
Перемещение вашего экземпляра MySQL в Large или выше дает вам гораздо больше памяти, а также лучшую производительность ввода-вывода. Я бы сначала попробовал создать программный RAID, а затем подумал бы о переходе на более крупный экземпляр. Обратите внимание, что вы действительно можете уйти от Wordpress с xlarge до большого, если вы хорошо настроите уровень данных.