MySQL 慢查询
什么是慢查询
MySQL 的慢查询日志是 MySQL 提供的一种日志记录,它用来记录在 MySQL 中响应时间超过阀值的语句,阈值指的是运行时间超过 long_query_time 值的 SQL,则会被记录到慢查询日志中。long_query_time 的默认值为 10,意思是运行 10 秒 以上的语句。默认情况下,MySQL 数据库并不启动慢查询日志,需要我们手动来设置这个参数。
慢查询需要知道的 “点”
- 企业级开发中,慢查询日志是会打开的。但是这同样会带来一定的性能影响。
- 慢查询日志支持将日志记录写入文件,也支持将日志记录写入数据库表
- 默认的阈值(long_query_time)是 10,这个显然不可用,通常,对于用户级应用而言,我们将它设置为 0.2
慢查询相关的变量
| SQL | 含义 | 备注 |
|---|---|---|
| show variables like ‘slow_query_log’; | 是否开启慢查询日志 | ON 表示开启;OFF 表示关闭 |
| show variables like ‘slow_query_log_file’; | 慢查询日志存储路径 | 根据 MySQL 版本不同而不同 |
| show variables like ‘long_query_time’; | 慢查询阈值 | 默认值是 10s,使用慢查询则一定需要更改 |
| show variables like ‘log_queries_not_using_indexes’; | 未使用索引的查询也被记录到慢查询日志中 | OFF 表示关闭,通常不会被开启 |
| show variables like ‘log_output’; | 慢查询日志存储方式 | 默认值是 FILE,表示将日志存入文件;修改为 TABLE,表示将日志存入数据库(mysql.slow_log 表) |
| show global status like ‘Slow_queries’; | 查看有多少条慢查询记录 |
关于变量的说明
-
修改变量可以使用命令:set global long_query_time = 0.2; (更常见的做法是修改 MySQL 的配置 my.cnf
-
日志记录到系统的专用日志表中,要比记录到文件耗费更多的系统资源。所以,不要将慢查询日志记录到表中。