mysql - 慢查询

130 阅读1分钟

慢查询介绍

记录所有执行超过系统设置的查询时间的SQL语句,帮助我们找到执行速度慢的SQL,进行后续的优化

慢查询参数

mysql> show variables like 'slow_query%';
+---------------------+-------------------------------------------------------------+
| Variable_name       | Value                                                       |
+---------------------+-------------------------------------------------------------+
| slow_query_log      | OFF                                                         |
| slow_query_log_file | /usr/local/var/mysql/chuangkegongchangdeMac-mini-3-slow.log |
+---------------------+-------------------------------------------------------------+
2 rows in set (0.01 sec)

slow_query_log 慢查询开关
slow_query_log_file 慢查询日志储蓄位置

开启慢查询

  1. 临时开关,关闭连接后恢复
set global slow_query_log=1; 
或者 set global slow_query_log=ON;
  1. 永久设置,开关保持 打开/etc/my.cfg, 写入
slow_query_log=ON
slow_query_log_file=/var/lib/mysql/localhost-slow.log

查看/设置慢查询时间

mysql> show variables like 'long_query%';
+-----------------+-----------+
| Variable_name   | Value     |
+-----------------+-----------+
| long_query_time | 10.000000 |
+-----------------+-----------+
1 row in set (0.00 sec)

默认慢查询设置10秒, 为了方便查看,我们设置为1秒

set long_query_time=1;

性能差的原因

  • I/O吞吐量小,形成了瓶颈效应
  • CPU性能差
  • 内存不足,磁盘空间不足
  • 没有索引或者没有用到索引
  • 查询语句太烂,没有优化(各种join,子查询)
  • 检索返回的数据量过大
  • 返回了不必要的行和列
  • 锁或者死锁(程序设计的缺陷)
  • 配置参数没有优化