MySQL慢查询 mysqldumpslow分析方法
mysql教程优化的第一步应该做的就是排查问题,找出瓶颈,而通常情况下的瓶颈和问题都需要通过观察mysql的运行情况来进行分析,《查看mysql运行状况》这篇文章罗列了一些常用的查看mysql运行信息的方式。
而对于大多数的程序员来说,最容易发现并解决的问题就是mysql的慢查询或者没有利用索引的查询,所以这里主要给大家介绍如何利用官方的mysqldumps教程low工具方便的查看这些信息。如何打开mysql的慢查询,请点击
最简单的方式,在php教程myadmin直接点击状态查看,详细如下图。
这查看的是mysql的一些运行状况数值,这种方式被大多数系统管理员所不齿,因为专业的mysql服务器很少有能通过phpmyadmin访问的,后面会介绍其他查看方式,但是phpmyadmin提供优化建议还是很具有指导性和参考性的。
show status
直接在命令行下登陆mysql运行show status;查询语句,详细如下图
同样的语句还有show variables;,show status是查看mysql运行情况,和上面那种通过pma查看到的信息基本类似。
show variables
show variables是查看mysql的配置参数,还可以使用类似show variables like ‘key%’
show processlist
show processlist是查看当前正在进行的进程,对于有锁表等情况的排查很有用处。一般情况下,打开mysql的慢查询记录同样有利于排查。
show open tables
show open tables是显示当前已经被打开的表列表。
mysqladmin status
使用mysql自带的mysqladmin 工具查看status,使用以下命令
mysqladmin -uroot –password=’password’ status
显示的结果如下:
uptime: 87117 threads: 1 questions: 5481626 slow queries: 16 opens: 2211 flush tables: 1 open tables: 512 queries per second avg: 62.923
另外可以添加 -i 5 参数,让其每五秒自动刷新之。
mysqladmin -uroot –password=’password’ status -i 5
mysqladmin extended-status
同样的可以使用mysqladmin -uroot –password=’password’ extended-status来查看更多的mysql运行信息,这种方式和第一种查看的信息基本一样。
关于mysql运行慢查看方法
打开mysql慢查询
mysql慢查询记录日志对于跟踪php+mysql体系下的mysql负载调优问题很有用处,比如安装了很多discuz!插件的用户,这样可以大概排查出那些插件有代码问题。其实启用mysql的慢查询日志很简单,只需要在mysql的配置文件里添加log-slow-queries和long_query_time两个参数即可。
今天有个朋友问我,就顺带记录上来。更多的mysql优化信息可以查看这里:http://www.ccvita.com/category/mysql
windows下开启mysql慢查询
mysql在windows系统中的配置文件一般是是my.ini找到[mysqld]下面加上
log-slow-queries = f:mysqllogmysqlslowquery.log
long_query_time = 2
linux下启用mysql慢查询
mysql在windows系统中的配置文件一般是是my.cnf找到[mysqld]下面加上
log-slow-queries=/data/mysqldata/slowquery.log
long_query_time=2
注意
log-slow-queries = f:mysqllogmysqlslowquery.log为慢查询日志存放的位置,一般这个目录要有mysql的运行帐号的可写权限,一般都将这个目录设置为mysql的数据存放目录;
long_query_time=2中的2表示查询超过两秒才记录;
2009年09月24日更新
在my.cnf或者my.ini中添加log-queries-not-using-indexes参数,表示记录下没有使用索引的查询。比如:
log-slow-queries=/data/mysqldata/slowquery.log
long_query_time=2
log-queries-not-using-indexes
mysqldumpslow命令
/path/mysqldumpslow -s c -t 10 /database/mysql/slow-log
这会输出记录次数最多的10条sql语句,其中:
-s, 是表示按照何种方式排序,c、t、l、r分别是按照记录次数、时间、查询时间、返回的记录数来排序,ac、at、al、ar,表示相应的倒叙;
-t, 是top n的意思,即为返回前面多少条的数据;
-g, 后边可以写一个正则匹配模式,大小写不敏感的;
比如
/path/mysqldumpslow -s r -t 10 /database/mysql/slow-log
得到返回记录集最多的10个查询。
/path/mysqldumpslow -s t -t 10 -g “left join” /database/mysql/slow-log
得到按照时间排序的前10条里面含有左连接的查询语句。
小结
使用mysqldumpslow命令可以非常明确的得到各种我们需要的查询语句,对mysql查询语句的监控、分析、优化是mysql优化的第一步,也是非常重要的一步
补充:数据库,mysql教程