mysql cpu负载,用MySQL慢日志分析解决MySQL CPU占用高的问题

我们可以通过MySQL慢日志分析来分析网站执行的sql语句占用的时间与性能从而我们对此条sql进行优化操作了,下面一起来看小编整理的用MySQL慢日志分析解决MySQL CPU占用高的问题的方法。

首先找到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 设置把日志写在哪里

把上述参数打开,运行一段时间,就可以关掉了,省得影响生产环境

接下来就是分析了,我这里的文件名字叫 /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  /var/log/mysql/slow.log

mysqldumpslow -s r -t 20  /var/log/mysql/slow.log

上述命令可以看出访问次数最多的20个sql语句和返回记录集最多的20个sql。

mysqldumpslow -t 10 -s t -g “left join”  /var/log/mysql/slow.log

这个是按照时间返回前10条里面含有左连接的sql语句。

例子,正确安全清空在线慢查询日志slow log的流程

1, see the slow log status;

mysql> show variables like '%slow%';

--------------------- ------------------------------------------

| Variable_name       | Value                                    |

--------------------- ------------------------------------------

| log_slow_queries    | ON                                       |

| slow_launch_time    | 2                                        |

| slow_query_log      | ON                                       |

| slow_query_log_file | /mysqllog/slow_log/slow_queries_3306.log |

--------------------- ------------------------------------------

4 rows in set (0.00 sec)

2, stop the slow log server.

mysql> set global slow_query_log=0;

Query OK, 0 rows affected (0.27 sec)

mysql> show variables like '%slow%';

--------------------- ------------------------------------------

| Variable_name       | Value                                    |

--------------------- ------------------------------------------

| log_slow_queries    | OFF                                      |

| slow_launch_time    | 2                                        |

| slow_query_log      | OFF                                      |

| slow_query_log_file | /mysqllog/slow_log/slow_queries_3306.log |

--------------------- ------------------------------------------

4 rows in set (0.00 sec)

mysql>

mysql> show variables like '%slow%'; -- check slow log status

--------------------- ------------------------------------------

| Variable_name       | Value                                    |

--------------------- ------------------------------------------

| log_slow_queries    | OFF                                      |

| slow_launch_time    | 2                                        |

| slow_query_log      | OFF                                      |

| slow_query_log_file | /mysqllog/slow_log/slow_queries_3306.log |

--------------------- ------------------------------------------

4 rows in set (0.00 sec)

3, reset the new path of slow log

mysql> set global slow_query_log_file='/mysqllog/slow_log/slow_queries_3306_new.log';

Query OK, 0 rows affected (0.03 sec)

4, start the slow log server

mysql>

mysql>

mysql> set global slow_query_log=1;

Query OK, 0 rows affected (0.01 sec)

mysql> show variables like '%slow%';

--------------------- ----------------------------------------------

| Variable_name       | Value                                        |

--------------------- ----------------------------------------------

| log_slow_queries    | ON                                           |

| slow_launch_time    | 2                                            |

| slow_query_log      | ON                                           |

| slow_query_log_file | /mysqllog/slow_log/slow_queries_3306_new.log |

--------------------- ----------------------------------------------

4 rows in set (0.00 sec)

5, check the slow sql in the new slow log file.

mysql> select sleep(10) as a, 1 as b;

--- ---

| a | b |

--- ---

| 0 | 1 |

--- ---

1 row in set (10.00 sec)

mysql>

[mysql@xxx-xxx ~]$ more /mysqllog/slow_log/slow_queries_3306_new.log

......

Time                 Id Command    Argument

# Time: 140213  6:44:24

# User@Host: root[root] @ localhost []

# Query_time: 10.000365  Lock_time: 0.000000 Rows_sent: 1  Rows_examined: 0

SET timestamp=1392273864;

select sleep(10) as a, 1 as b;

6, backup the old big slow log file to other directory.

mv /mysqllog/slow_log/slow_queries_3306.log /mysqlbackup/slow_log/slow_queries_3306.log.bak.20140213

用了这个工具就可以查询出来那些sql语句是性能的瓶颈,进行优化,比如加索引,该应用的实现方式等

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值