全球主机交流论坛
标题:
大哥们,mysql 导致负载高怎么办啊。
[打印本页]
作者:
ohmyga
时间:
2013-4-17 13:05
标题:
大哥们,mysql 导致负载高怎么办啊。
本帖最后由 ohmyga 于 2013-4-17 13:06 编辑
平时都正常昨天出现一次 今天出现一次,重启下mysql 就好,这是什么情况。。。
top - 13:10:00 up 110 days, 32 min, 1 user, load average: 826.25, 507.02, 239.61
Tasks: 449 total, 23 running, 425 sleeping, 0 stopped, 1 zombie
Cpu(s): 18.5%us, 24.6%sy, 0.0%ni, 48.9%id, 7.8%wa, 0.1%hi, 0.2%si, 0.0%st
Mem: 12309624k total, 12229260k used, 80364k free, 952784k buffers
Swap: 4192956k total, 144k used, 4192812k free, 4347256k cached
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
29903 mysql 15 0 7445m 3.8g 5292 R 313.4 31.9 3145:17 mysqld
29965 www 15 0 286m 17m 10m R 2.0 0.1 0:00.36 php-cgi
30201 www 16 0 287m 17m 10m R 2.0 0.1 0:00.69 php-cgi
30211 www 15 0 287m 14m 7676 S 2.0 0.1 0:00.23 php-cgi
30214 www 16 0 286m 14m 8260 S 1.7 0.1 0:00.34 php-cgi
29982 www 16 0 287m 17m 10m R 1.3 0.1 0:00.35 php-cgi
30104 www 16 0 286m 16m 9.9m R 1.3 0.1 0:00.30 php-cgi
29980 www 16 0 289m 16m 9960 S 1.0 0.1 0:00.14 php-cgi
30033 www 15 0 287m 16m 9.8m R 1.0 0.1 0:00.27 php-cgi
30086 www 15 0 286m 17m 11m S 1.0 0.1 0:00.34 php-cgi
30120 www 16 0 287m 16m 9.8m R 1.0 0.1 0:00.23 php-cgi
26580 www 16 0 88360 47m 1040 S 0.7 0.4 60:43.22 nginx
29025 root 25 0 66088 1200 984 D 0.7 0.0 0:00.22 sh
29139 root 25 0 66088 1184 984 S 0.7 0.0 0:00.18 sh
29956 www 16 0 287m 17m 10m R 0.7 0.1 0:00.37 php-cgi
29985 www 15 0 286m 17m 10m R 0.7 0.1 0:00.24 php-cgi
30026 www 15 0 286m 14m 8620 S 0.7 0.1 0:00.05 php-cgi
30110 www 15 0 287m 16m 9460 R 0.7 0.1 0:00.15 php-cgi
30124 www 16 0 286m 17m 10m S 0.7 0.1 0:00.48 php-cgi
作者:
getvm
时间:
2013-4-17 13:09
提示:
作者被禁止或删除 内容自动屏蔽
作者:
过客
时间:
2013-4-17 13:29
标题:
用MySQL Slow Log解决MySQL CPU占用高的问题
在Linux VPS系统上有时候会发现MySQL占用CPU高,导致系统的负载比较高。这种情况很可能是某个SQL语句执行的时间太长导致的。优化一下这个SQL语句或者优化一下这个SQL引用的某个表的索引一般能解决问题。
但是怎么找到是哪个SQL语句的执行时间过长呢?可以通过MySQL Slow Log来找,详解如下。
首先找到MySQL的配置文件my.cnf,根据不同版本的mysql开启慢查询的配置也不一样
mysql 5.0
[mysqld]
long_query_time = 1
log-slow-queries = /var/log/mysql/slow.log
mysql 5.1
[mysqld]
long_query_time = 1
slow_query_log=1
slow_query_log_file = /var/log/mysql/slow.log
long_query_time 是指执行超过多久的sql会被log下来,这里是1秒。
log-slow-queries和slow_query_log_file 设置把日志写在哪里
把上述参数打开,运行一段时间,就可以关掉了,省得影响生产环境
接下来就是分析了,我这里的文件名字叫 0 2/var/log/mysql/slow.log。
先mysqldumpslow –help下,主要用的是
-s ORDER what to sort by (t, at, l, al, r, ar etc), ‘at’ is default
-t NUM just show the top n queries
-g PATTERN grep: only consider stmts that include this string
-s,是order的顺序,说明写的不够详细,主要有
c,t,l,r和ac,at,al,ar,分别是按照query次数,时间,lock的时间和返回的记录数来排序,前面加了a的时倒序
-t,是top n的意思,即为返回前面多少条的数据
-g,后边可以写一个正则匹配模式,大小写不敏感的
mysqldumpslow -s c -t 20 0 2 0 2/var/log/mysql/slow.log
mysqldumpslow -s r -t 20 0 2 0 2/var/log/mysql/slow.log
上述命令可以看出访问次数最多的20个sql语句和返回记录集最多的20个sql。
mysqldumpslow -t 10 -s t -g “left join” 0 2 0 2/var/log/mysql/slow.log
这个是按照时间返回前10条里面含有左连接的sql语句。
用了这个工具就可以查询出来那些sql语句是性能的瓶颈,进行优化,比如加索引,该应用的实现方式等。
作者:
sdgl212
时间:
2013-4-17 14:25
挂TZ
欢迎光临 全球主机交流论坛 (https://loc.fffk.eu.org/)
Powered by Discuz! X3.4