Я заметил, что вы уже используете MySQL Query Cache.
Вы пытались использовать MySQL Workbench для подключения к базе данных MySQL? Он предлагает графический способ проверки вашей базы данных MySQL, включая список процессов.
Если вы находитесь за брандмауэром, попробуйте использовать
show full processlist
Однако, я думаю, это не очень поможет.
Я бы предположил, что вы используете PHP - MySQL для раздачи веб-страниц. Таким образом, это означает, что вы в основном обнаружите, что MySQL-соединения сделаны из PHP. Чтобы увидеть, сколько потоков Apache работает одновременно. Вы можете попробовать:
ps aux |grep httpd |wc -l
Если у вас есть много потоков на apache, подключающихся к MySQL, то вы знаете, что у вас есть проблема.
Вы упомянули, что у вас загруженный сайт, поэтому реальным решением вашей проблемы является кэширование вашего контента, возможно, с использованием memcached. Идея состоит в том, чтобы уменьшить количество обращений к вашему серверу MySQL. Ваш сервер имеет много оперативной памяти и идеально подходит для memcached.
Эта идея заключается в повторном использовании контента в течение определенного периода времени, в зависимости от того, нуждается ли контент в свежести:
<?php
$cachedContent = $memcache->get("cacheKey");
if (!$cachedContent) {
// retrieve from MySQL and formulate HTML here
// you can use obstart so that you can reuse your previous code
ob_start();
// your previous code here
// echo or
?>
<div>
previous generated content from mysql
</div>
<?php
// now cachedContent contains your previous generated HTML
$cachedContent = ob_get_contents();
// set content into memcache
$memcache->set("cacheKey", $cachedContent, false, 1800);
// clear the buffer
ob_end_flush();
}
echo $cachedContent;
?>
Вам нужно сначала найти, какое содержимое кэшировать. Хорошие места для начала:
- Неэффективные биты на странице index.php (я полагаю, это будет одна из самых популярных страниц)
- Проверьте свой GA для большинства популярных страниц.
- Проверьте медленные запросы MySQL и кэшируйте их содержимое.