Я управляю молодой некоммерческой организацией, целью которой является предоставление бесплатного и недорогого веб-хостинга.
Уже несколько дней загрузка нашего сервера составляет около 1,5, иногда до 7. top
показывает мне, что MySQL - плохой мальчик:
PID USER PRI NI VIRT RES SHR S CPU% MEM% TIME+ Command
26362 mysql 20 0 2757M 762M 5872 S 16.0 7.7 3h54:51 /usr/sbin/mysqld --basedir=/ --datadir=/var/lib/mysql --user=mysql --log-error=/var/lib/mysql/shadow.err --open-files-limit=50000 --pid-file=/var/lib/mysql/shadow.pid
У вас есть представление о том, как я могу определить сценарий, выполняющий запрос? Спасибо за помощь.
Если вы включите журнал медленных запросов в mysql, это даст вам отправную точку для любых операторов SQL, которые требуют много ресурсов. Он не скажет вам, какой сценарий PHP был виновником, но у вас будет база данных, таблица и SQL, а также время возникновения проблемы;
http://dev.mysql.com/doc/refman/5.7/en/slow-query-log.html
Журнал медленных запросов состоит из операторов SQL, выполнение которых заняло более long_query_time секунд и требовало проверки не менее min_examined_row_limit строк.
Выполните следующий запрос;
set global slow_query_log = 1;
По умолчанию журнал медленных запросов доступен следующим образом;
mysqldumpslow /var/log/mysql/mysql-slow.log
вот несколько примеров анализа информации в журнале медленных запросов здесь;
https://easyengine.io/tutorials/mysql/slow-query-log/
Вы можете совместить это с изучением файлов журнала веб-сервера, чтобы найти запросы, которые возникли одновременно с длительным запросом. Например, если вы обнаружили особенно медленный запрос, проверьте файлы журнала apache или nginx;
[root@vps001 www]# vi /var/log/httpd/access_log
покажет вам, какой php файл соответствует конкретному запросу времени;
185.142.237.8 - - [03/Jul/2016:04:27:14 +0000] "POST /xmlrpc.php HTTP/1.1" 200 370 "-" "Googlebot/2.1 (+http://www.google.com/bot.html)"
ПОКАЗАТЬ ПОЛНЫЙ СПИСОК ПРОЦЕССОВ;
Это даст вам текущие запросы на вашем сервере и время, затрачиваемое на него, скопируйте и добавьте запрос с EXPLAIN EXTENDED и оцените результат, внесите соответствующие изменения в запрос, добавив индексы, изменив типы данных и т. Д.
Вы не должны использовать значения переменных по умолчанию, вы всегда должны изменять некоторые из переменных для достижения высокой производительности, например query_cache_size, key_buffer, table_cache, sort_buffer, read_rnd_buffer_size, thread_cache и т. Д.
Ссылка : http://www.botskool.com/geeks/how-reduce-server-load-mysql-caching-and-optimization
Как пользователь root mysql попробуйте:
mysql> show processlist;
Это позволит вам определить запрос, вызывающий нагрузку, и отследить его до искомого скрипта php.
Примечание. Если загрузка ЦП процессом mysql низка (как показано в верхнем выводе), но вы испытываете нагрузку> 1, вероятно, mysql вызывает слишком много операций ввода-вывода.