Debian下开启慢查询日志优化Mysql

文章目录

在前面介绍了php以及nginx的优化策略,今天继续介绍Mysql的优化方法。在很多应用中,Mysql的读写的比例一般为10:1,而且插入操作和一般的更新操作很少出现性能问题,遇到最多的,也是最容易出问题的,还是一些复杂的查询操作,所以查询语句的优化显然是重中之重。而通过开启Mysql慢查询日志是对查询语句优化的有效方法。本文就主要来介绍下通过开启慢查询日志来优化Mysql。

开启慢查询日志

修改mysql的配置文件my.cnf

1
vi /etc/mysql/my.cnf

mysqld Block添加如下代码

1
2
3
4
slow_query_log = 1
slow_query_log_file = /var/log/mysql/mysql-slow.log
long_query_time = 2
log-queries-not-using-indexes

其中,long_query_time = 2表示查询超过2秒才记录;log-queries-not-using-indexes表示记录下没有使用索引的查询

添加完之后,重启mysql

1
/etc/init.d/mysql restart

需要注意的是开启慢查询日志会消耗系统的IO,需要合理的开启和关闭。

慢查询日志分析

1、慢查询日志

/var/log/mysql/mysql-slow.log我们可以看到慢查询日志,如

1
2
3
4
5
6
7
8
9
10
# Time: 121017 17:38:54 
# User@Host: root[root] @ localhost [127.0.0.1] 
# Query_time: 3.794217 Lock_time: 0.000000 Rows_sent: 1 Rows_examined: 4194304
SET timestamp=1350466734; 
select * from wei where text='orange';
# Time: 121017 17:46:22 
# User@Host: root[root] @ localhost [127.0.0.1] 
# Query_time: 3.819219  Lock_time: 0.000000 Rows_sent: 0 Rows_examined: 4194304
SET timestamp=1350467182; 
select * from wei where text='xishizhaohua';

其中,我们可以看到两条执行慢的语句

1
2
select * from wei where text='orange'; 
select * from wei where text='xishizhaohua';

2、慢查询分析工具mysqldumpslow

实际上,有时产生的慢查询日志会非常多,我们无法直接通过人工得到,这是需要用到慢查询分析工具。这里主要介绍下系统自带的分析工具mysqldumpslow,一般只要安装了mysql,就会有该工具。

用法如下:

Usage: mysqldumpslow [ OPTS... ] [ LOGS... ]  — 后跟参数以及log文件的绝对地址;

  -s            what to sort by (al, at, ar, c, l, r, t), ‘at’ is default  
                al: average lock time  
                ar: average rows sent
                at: average query time
                c: count 
                l: lock time
                r: rows sent
                t: query time

  -r           reverse the sort order (largest last instead of first)
  -t NUM       just show the top n queries
  -a           don’t abstract all numbers to N and strings to ‘S’
  -n NUM       abstract numbers with at least n digits within names
  -g PATTERN   grep: only consider stmts that include this string
  -h HOSTNAME  hostname of db server for *-slow.log filename (can be wildcard),
               default is ‘*’, i.e. match all
  -i NAME      name of server instance (if using mysql.server startup script)
  -l           don’t subtract lock time from total time

常见的用法有:

1
2
3
4
mysqldumpslow -s c -t 10 /var/log/mysql/mysql-slow.log # 取出使用最多的10条慢查询 
mysqldumpslow -s t -t 3 /var/log/mysql/mysql-slow.log # 取出查询时间最慢的3条慢查询
mysqldumpslow -s t -t 10 -g “left join/var/log/mysql/mysql-slow.log # 得到按照时间排序的前10条里面含有左连接的查询语句
mysqldumpslow -s r -t 10 -g 'left join' /var/log/mysql/mysql-slow.log # 按照扫描行数最多的

优化方法

我们常用的优化措施是添加索引。通过添加索引,查询速度就可能提高百倍千倍。但是天下没有免费的午餐,查询速度的提高是以插入、更新、删除的速度为代价的,这些写操作,增加了大量的I/O。

本文出自 TENNFY博客,转载时请注明出处及相应链接。

本文永久链接: https://www.tennfy.com/3795.html

下一篇文章:

上一篇文章:

1人参与了讨论

  1. python教程 说:

    # Query_time: 3.794217 Lock_time: 0.000000 Rows_sent: 1 Rows_examined: 4194304
    Rows_examined是什么意思?

发表评论

电子邮件地址不会被公开。 必填项已用 * 标注

*

7 + 5 = ?


您可以使用这些 HTML 标签和属性: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

返回顶部