有时候在测试环境中开发,并不一定能在开发阶段解决现有问题,比如由于数据量不对称,撸的代码在测试环境跑的好好的,但在现网环境超时或相应很慢,这时就需要揪出来是哪块出了问题,哪条sql 执行过慢了。这时就需要在mysql 服务端设置一个时间阈值,超过该阈值就判定是慢查询,并优化之。
查看慢查询日志是否开启:
mysql> show variables like '%slow%';
+---------------------------+-------------------------------------+
| Variable_name | Value |
+---------------------------+-------------------------------------+
| log_slow_admin_statements | OFF |
| log_slow_slave_statements | OFF |
| slow_launch_time | 2 |
| slow_query_log | OFF |
| slow_query_log_file | /usr/local/mysql/var/zhang-slow.log |
+---------------------------+-------------------------------------+
5 rows in set (0.02 sec)
mysql>
上面的变量中slow_query_log 的值为OFF,即表示慢查询日志是关闭状态。慢查询日志文件是/usr/local/mysql/var/zhang-slow.log 。
我们开启慢查询日志,并且将时间阈值设置为1秒。
首先查看默认时间阈值:
mysql> select @@long_query_time;
+-------------------+
| @@long_query_time |
+-------------------+
| 10.000000 |
+-------------------+
1 row in set (0.00 sec)
mysql>
可以看到默认是10秒,这里设置为1秒 。long_query_time = N 超过该时间临界点,就判定为慢查询(这里为1 秒)。
mysql> set global slow_query_log = 1;
Query OK, 0 rows affected (0.05 sec)
mysql> set long_query_time = 1;
Query OK, 0 rows affected (0.00 sec)
mysql>
然后 执行 事先准备好的sql :
可以看到,执行时间已超过所设定的时间阈值。下面去慢查询日志文件查看下,刚才的 sql 语句有没有记录进去。
其中Query_time 表示执行时间。