我正在运营一个年轻的非营利组织,旨在提供免费和低成本的networking托pipe。
几天以来,我们的服务器负载在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 root用户,请尝试:
mysql> show processlist;
这将允许您识别导致负载的查询,并使您能够追溯到您正在查找的PHP脚本。
注意:如果mysql进程的CPU使用率很低(如上面的输出所示),但是您正在经历> 1的负载,那么mysql可能会导致太多的IO。
显示完整的进程列表;
这将使您当前在您的服务器上运行查询和时间,通过EXPLAIN EXTENDED复制和附加查询,并通过添加索引,更改数据types等来评估结果,从而对查询进行相应的更改。
你不应该使用默认的variables值,你应该总是改变一些variables,以获得很好的性能,如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
如果您在mysql中启用缓慢的查询日志,它将为任何占用大量资源的SQL语句提供一个起点。 它不会告诉你哪个PHP脚本是罪魁祸首,但是你将拥有数据库,表和SQL以及问题的时间;
http://dev.mysql.com/doc/refman/5.7/en/slow-query-log.html
慢速查询日志由执行超过long_query_time秒的SQL语句组成,并且至less需要检查min_examined_row_limit行。
运行以下查询;
set global slow_query_log = 1;
默认情况下,慢速查询日志可以这样访问;
mysqldumpslow /var/log/mysql/mysql-slow.log
这里是一些parsing慢查询日志中的信息的例子;
https://easyengine.io/tutorials/mysql/slow-query-log/
您可以将其与检查Web服务器日志文件结合使用,以查找与长时间运行的查询同时发生的请求。 例如,一旦你发现一个特别慢的查询检查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)"