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

标签: MySQL解错方案 CPU Slow | 发表时间:2014-04-08 06:47 | 作者:OurMySQL
出处:http://ourmysql.com

   在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语句是性能的瓶颈,进行优化,比如加索引,该应用的实现方式等。

猜您喜欢

相关 [mysql slow log] 推荐:

[转]用mysqldumpslow分析mysql的slow query log

- - 小彰
mysql有一个功能就是可以log下来运行的比较慢的sql语句,默认是没有这个log的,为了开启这个功能,要修改my.cnf或者在mysql启动的时候加入一些参数. 如果在my.cnf里面修改,需增加如下几行. long_query_time 是指执行超过多久的sql会被log下来,这里是1秒. log-slow-queries 设置把日志写在那里,可以为空,系统会给一个缺省的文件 host_name-slow.log,我生成的log就在mysql的data目录.

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

- - OurMySQL
   在Linux VPS系统上有时候会发现MySQL占用CPU高,导致系统的负载比较高. 这种情况很可能是某个SQL语句执行的时间太长导致的. 优化一下这个SQL语句或者优化一下这个SQL引用的某个表的索引一般能解决问题.    但是怎么找到是哪个SQL语句的执行时间过长呢. 可以通过MySQL Slow Log来找,详解如下.

必须了解的MySQL三大日志:binlog、redo log和undo log

- - DockOne.io
日志是 MySQL数据库的重要组成部分,记录着数据库运行期间各种状态信息. MySQL日志主要包括错误日志、查询日志、慢查询日志、事务日志、二进制日志几大类. 作为开发,我们重点需要关注的是二进制日志( binlog)和事务日志(包括 redo log和 undo log),本文接下来会详细介绍这三种日志.

MySQL BIN LOG 指令參數相關備註

- - SSORC.tw
指定 bin log 最多存幾天的記錄. 指定刪除某個時間點以前的 bin log 記錄. 指定刪除某個檔案流水號以前的 bin log 記錄. 清除 3 天前的 bin log. FLUSH LOGS 會讓 bin log 標記這個檔的記錄到這裡為止,重新記錄在新的檔案裡. MYSQL 5.5 的 /my.cnf 設定 bin log.

Log调试

- - ITeye博客
在开发中我们一定不能避免使用Log类,但是这个类存在一个问题就是,当你在程序中使用了大量的Log,那么在程序开发完毕的时候,这将是一个问题,因为,你需要将所有的Log记录注释掉(当然,你不注释也是可以的). 我们可以写一个类,将Log类包装起来,使用一个boolean来控制所有的Log记录的显示. public static final boolean isDebug = true;//这里控制所有Log的显示情况.

log file sync总结

- - 数据库 - ITeye博客
log file sync等待时间发生在redo log从log buffer写入到log file期间. 下面对log file sync做个详细的解释. 1.commit或者rollback. 3.log buffer 1/3满或者已经有1M的redo数据.       更精确的解释:_LOG_IO_SIZE 大小默认是LOG_BUFFER的1/3,当log buffer中redo数据达到_LOG_IO_SIZE 大小时,发生日志写入.

Oracle online redo log 扫盲

- - CSDN博客数据库推荐文章
Oracle 的日志分为:ONLINE REDO LOG 和 archived log. 一个数据库至少要有2组 redo log,每组 redo log 至少要有一个 member(出于安全考虑,建议每组 redo log 至少有 2 个多元化的 redo log member). redo log 循环使用,当一组日志写满后,就会切换到下一组日志.

静态cache之log共现词分析

- - 搜索技术博客-淘宝
搜索引擎的log数据可以用于query理解、user理解、doc理解和ranking. 我们运行共现词分析,挖掘出引擎的query log里面共现的词,离线建静态cache,用于提升引擎的性能. 分析query log里query的平均的term数,值为5. 我们对query log依次进行一至四元共现词分析,高于四元的我们推荐用fullcache解决,而且高元的离线计算成本也太高.

log file sync等待超高一例

- - CSDN博客数据库推荐文章
这是3月份某客户的情况,原因是服务器硬件故障后进行更换之后,业务翻译偶尔出现提交缓慢的情况. 我们可以看到,该系统的load profile信息其实并不高,每秒才21个transaction. 先来看看top5events:. 从top 5event,我们可以发现,log file sync的avg wait非常之高,高达124ms.

Slow-DNS-Lookup问题:默认启用了 ipv6-dns-lookup 以至于必须等待超时

- - 博客园_旁观者
Java HttpClient 从主站机房发起对××××的 open.×××.com 域名下 WebService 接口的 HTTP 请求,极其缓慢. 不指定 IP协议,wget 访问它的接口,时间为 4.163 秒,基本浪费在解析主机的过程上. 如指定 wget 的 IP协议为IPV4,wget 测试则仅需 0.096 秒.