使用MySQL Slow Log来解决MySQL CPU占用高的问题

 更新时间:2013年03月31日 13:15:47   作者:  
在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 设置把日志写在哪里


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

接下来就是分析了,我这里的文件名字叫 /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语句。

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

相关文章

  • 在MySQL数据库中使用C执行SQL语句的方法

    在MySQL数据库中使用C执行SQL语句的方法

    与PostgreSQL相似,可使用许多不同的语言来访问MySQL,包括C、C++、Java和Perl。从Professional Linux Programming中第5章有关MySQL的下列章节中,Neil Matthew和Richard Stones使用详尽的MySQL C接口向我们介绍了如何在MySQL数据库中执行SQL语句。
    2012-10-10
  • MySQL之权限以及设计数据库案例讲解

    MySQL之权限以及设计数据库案例讲解

    这篇文章主要介绍了MySQL之权限以及设计数据库案例讲解,本篇文章通过简要的案例,讲解了该项技术的了解与使用,以下就是详细内容,需要的朋友可以参考下
    2021-08-08
  • mysql字段为null为何不能使用!=

    mysql字段为null为何不能使用!=

    这篇文章主要介绍了mysql字段为null为何不能使用!=问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-05-05
  • mysql 5.7.21 解压版安装配置方法图文教程

    mysql 5.7.21 解压版安装配置方法图文教程

    这篇文章主要为大家详细介绍了mysql 5.7.21 解压版安装配置方法图文教程,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-05-05
  • MySQL中union和unionall区别

    MySQL中union和unionall区别

    本文主要介绍了MySQL中union和unionall区别,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-04-04
  • Ubuntu下取消MySQL数据库本机绑定限制方法

    Ubuntu下取消MySQL数据库本机绑定限制方法

    在Ubuntu系统中,添加了MySQL账户,赋予了数据库完全操作权限,并且允许数据库从外部链接 但是,还是无法远程访问MySQL数据库
    2013-06-06
  • Mysql中的触发器定义及语法介绍

    Mysql中的触发器定义及语法介绍

    MySQL 的触发器和存储过程一样,都是嵌入到 MySQL 中的一段程序,是 MySQL 中管理数据的有力工具,本文给大家详细介绍mysql触发器的定义语法知识,感兴趣的朋友一起看看吧
    2022-06-06
  • MySQL删除外键时报错Error Code:1091. Can‘t DROP ‘XXX‘的解决方法

    MySQL删除外键时报错Error Code:1091. Can‘t DROP ‘XXX‘的解决方法

    这篇文章主要给大家介绍了关于MySQL删除外键时报错Error Code:1091. Can‘t DROP ‘XXX‘的解决方法,文中通过图文介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2022-08-08
  • MySQL NDB Cluster关于Nginx stream的负载均衡配置方式

    MySQL NDB Cluster关于Nginx stream的负载均衡配置方式

    这篇文章主要介绍了MySQL NDB Cluster关于Nginx stream的负载均衡配置方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-05-05
  • 简单了解MYSQL数据库优化阶段

    简单了解MYSQL数据库优化阶段

    这篇文章主要介绍了简单了解MYSQL数据库优化阶段,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-04-04

最新评论