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条里面含有左连接的查询语句。
# The ideal of life is for ideal life! #