慢查询介绍
记录所有执行超过系统设置的查询时间的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 慢查询日志储蓄位置
开启慢查询
- 临时开关,关闭连接后恢复
set global slow_query_log=1;
或者 set global slow_query_log=ON;
- 永久设置,开关保持 打开/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,子查询)
- 检索返回的数据量过大
- 返回了不必要的行和列
- 锁或者死锁(程序设计的缺陷)
- 配置参数没有优化