你的位置:首页 > 数据库

[数据库]MySQL 慢查询


简述:

分析MySQL语句查询性能的方法除了使用 EXPLAIN 输出执行计划,还可以让MySQL记录下查询 超过指定时间的语句,我们将超过指定时间的SQL语句查询称为“慢查询”。

它能记录下所有执行超过 long_query_time时间的SQL语句, 帮你找到执行慢的SQL,  方便我们对这些SQL进行优化。

在优化MySQL时,通常需要对数据库进行分析,常见的分析手段有 慢查询日志,EXPLAIN 分析查询, profiling分析 以及 show命令查询系统状态及系统变量,通过定位分析性能的瓶颈,才能更好的优化数据库系统的性能。

思路:

--> 分析慢查询日志 --> 查看表结构、表状态 --> 查看表索引 --> 分析sql语句 --> explain --> 修改sql语句 --> 验证修改结果

慢查询日志配置:

1、在my.ini配置文件中添加以下选项:

log-slow-queries=master-0-slow.log 慢查询日志位置

log-queries-not-using-indexes=on  没有使用索引的Query也计入慢查询日志

long_query_time=1  当Query语句大于1秒时记入慢查询日志

--> linux下mysql开启慢查询方法:

mysql在linux系统中的配置文件一般是my.cnf,我的路径是/etc/my.cnf,你根据自己编译安装的路径去查找 vi /etc/my.cnf

一样是在[mysqld]下面加上:

log-slow-queries=/var/lib/mysql/slowquery.log

long_query_time=2

log-queries-not-using-indexes

这里就不再解释了,加上后重启mysql,就可以到/var/lib/mysql下看是否有slowquery.log生成了. cd /var/lib/mysql/

2、在命令窗口通过命令查询慢查询配置信息

① 查看Query语句执行时间大于多少秒计入慢查询日志

 

通过命令行动态配置:MySQL> set long_query_time=1;

② 查看慢查询日志是否打开与存放路径

 

通过命令行动态配置:MySQL> set global slow_query_log='ON'

慢查询日志格式

# Time: 120331 10:05:48

# User@Host: root[root] @ 91SK-B49337164E [10.10.10.99]

# Query_time: 14.031250  Lock_time: 0.218750 Rows_sent: 0  Rows_examined: 90785 SET timestamp=1333159548; delete from orderinfo;

这是慢查询日志中的一条,用了14.031250秒,锁了0.218750秒,返回0行,一共查了90785行

通过mysqldumpslow命令查看慢查询日志:

1、 由于mysql自带命令mysqldumpslow.pl使用的是perl脚本,所以需要安装perl环境。下载ActivePerl.exe安装包并进行安装。

2、在DOS命令行下执行mysqldumpslow命令

 

使用mysqldumpslow命令在f:\master-0-slow.log慢查询日志中查找日志中记录次数最多的前10条SQL语句。并存放到f:\master-slow-0.txt文件中。

mysqldumpslow命令解析:

-s, 表示按照何种方式排序,c、t、l、r分别是按照记录次数、时间、查询时间、返回的记录数来排序,ac、at、al、ar,表示相应的倒叙;

-t, 是top n的意思,即为返回前面多少条的数据;

-g, 后边可以写一个正则匹配模式,大小写不敏感的;

例如:返回记录集最多的10个查询。

按照时间排序的前10条里面含有左连接的查询语句。