MySQL通过慢查询日志定位执行效率较低的SQL语句,当慢查询日志的内容过多时,通过mysqldumpslow工具(MySQL客户端安装自带)来对慢查询日志进行分类汇总。
MySQL通过慢查询日志定位那些执行效率较低的SQL 语句,用--log-slow-queries[=file_name]选项启动时,mysqld 会写一个包含所有执行时间超过long_query_time 秒的SQL语句的日志文件,通过查看这个日志文件定位效率较低的SQL 。
慢查询日志在查询结束以后才记录,所以在应用反映执行效率出现问题的时候查询慢查询日志并不能定位问题,可以使用show processlist命令查看当前MySQL在进行的线程,包括线程的状态、是否锁表等,可以实时地查看SQL 的执行情况,同时对一些锁表操作进行优化。
下面我们举例说明一下,如何通过慢查询日志定位执行效率低的SQL 语句:
开启慢查询日志,配置样例:
[mysqld]
log-slow-queries
在my.cnf 配置文件中增加上述配置项并重启mysql服务,这时mysql慢查询功能生效。慢查询日志将写入参数DATADIR(数据目录)指定的路径下,默认文件名是host_name-slow.log 。
和错误日志、查询日志一样,慢查询日志记录的格式也是纯文本,可以被直接读取。下例中演示了慢查询日志的设置和读取过程。
首先查询一下 long_query_time 的值 。
mysql> show variables like 'long%';
+-----------------+-------+
| Variable_name | Value |
+-----------------+-------+
| long_query_time | 10 |
+-----------------+-------+
1 row in set (0.00 sec)
为了方便测试,将修改慢查询时间为5秒。
mysql> set long_query_time=5;
Query OK, 0 rows affected (0.02 sec)
依次执行下面两个查询语句。
第一个查询因为查询时间低于5 秒而不会出现在慢查询日志中:
mysql> select count(*) from order2008;
+----------+
| count(*) |
+----------+
| 208 |
+----------+
1 row in set (0.00 sec)
第二个查询因为查询时间大于5 秒而应该出现在慢查询日志中:
mysql> select count(*) from t_user;
+----------+
| count(*) |
+----------+
| 6552961 |
查看慢查询日志。
[root@localhost mysql]# more localhost-slow.log
# Time: 081026 19:46:34
# User@Host: root[root] @ localhost []
# Query_time: 11 Lock_time: 0 Rows_sent: 1 Rows_examined: 6552961
select count(*) from t_user;
从上面日志中,可以发现查询时间超过5 秒的SQL,而小于5秒的则没有出现在此日志中。
如果慢查询日志中记录内容很多,可以使用mysqldumpslow工具(MySQL客户端安装自带)来对慢查询日志进行分类汇总。下例中对日志文件mysql_master-slow.log进行了分类汇总,只显示汇总后摘要结果:
[root@mysql_master mysql_data]#mysqldumpslow mysql_master-slow.log
Reading mysql slow query log from mysql_master-slow.log
Count: 2 Time=11.00s (22s) Lock=0.00s (0s) Rows=1.0 (2), root[root]@mysql_master
select count(N) from t_user;
对于 SQL 文本完全一致,只是变量不同的语句,mysqldumpslow 将会自动视为同一个语句进行统计,变量值用N来代替。这个统计结果将大大增加用户阅读慢查询日志的效率,并迅速定位系统的SQL 瓶颈。
注意:慢查询日志对于我们发现应用中有性能问题的SQL很有帮助,建议正常情况下,打开此日志并经常查看分析。
MySQL优化之使用慢查询日志定位效率较低的SQL语句
发表于:2017-08-08
作者:网络转载
来源:
 相关文章
MySQL性能飞跃:揭秘高效数据库优化的... MySQL数据库性能优化中常用的方法是什么? MySQL安全最佳实践指南(2024版) MySQL面试大揭秘:你不得不掌握的十大... 只有1%的人知道的MySQL性能优化,却能... 面试题:Redis和MySQL的事务区别是什么?- 周排行
- 月排行
-   区块链共识机制分析——论PoW,PoS,D...
-   SQL 性能调优优秀实践
-   MySQL安全最佳实践指南(2024版)
-   企业在什么情况下有引入分布式数据库...
-   如何解决Redis缓存雪崩、缓存穿透、缓...
-   异构数据库迁移的九个大坑怎么躲开
-   MySQL分库分表全攻略:从小白到大神的...
-   区块链共识机制分析——论PoW,PoS,D...
-   数据库:评估安全风险4个要点
-   G 行 EverDB 自动化混沌测试之路
-   为什么你的数据库需要单元测试
-   SQL 性能调优优秀实践
-   系统请求1次10s,我被客户爆骂,一怒...
-   为什么越来越多的人选择PostgreSQL,...