慢查询
Mysql慢查询日志可以记录在MySQL中响应时间超过阀值的语句,具体指运行时间超过long_query_time值的SQL,可以通过设置long_query_time
为0来捕获所有的查询。
不用担心开启慢查询日志会带来额外的I/O开销,我们在I/O密集型场景做过基准测试,慢查询日志带来的开销可以忽略不计(实际上在CPU密集型场景的影响还稍微大一些)。更需要担心的是日志可能消耗大量的磁盘空间。如果长期开启慢查询日志,注意要布署日志轮转(log rotation)工具。或者不要长期启用慢查询日志,只在需要收集负载样本期间开启即可。
相关参数
//查看版本相关
show variables like '%version%';
![](https://img.haomeiwen.com/i7634890/18aa18144cd18d66.png)
//慢查询的状态和日志文件位置
show variables like '%slow_query_log%';
![](https://img.haomeiwen.com/i7634890/e6d2e9b63b458daf.png)
//查看当前慢查询状态
show variables like '%quer%';
![](https://img.haomeiwen.com/i7634890/2411698e3a0f2877.png)
-
slow_query_log_file
的值是记录的慢查询日志到文件中(注意:默认名为主机名.log,慢查询日志是否写入指定文件中,需要指定慢查询的输出日志格式为文件,相关命令为:show variables like ‘%log_output%’;去查看输出的格式)。 -
long_query_time
指定了慢查询的阈值,即如果执行语句的时间超过该阈值则为慢查询语句,默认值为10秒。 -
log_queries_not_using_indexes
如果值设置为ON,则会记录所有没有利用索引的查询
(注意:如果只是将log_queries_not_using_indexes
设置为ON,而将slow_query_log
设置为OFF,此时该设置也不会生效,即该设置生效的前提是slow_query_log的值设置为ON)
一般在性能调优的时候会暂时开启
慢查询日志输出到表中(即mysql.slow_log) set global log_output='TABLE';
慢查询日志仅输出到文本中(即:slow_query_log_file指定的文件 set global log_output='FILE';
慢查询日志同时输出到文本和表中 set global log_output='FILE,TABLE';
查询当前慢查询的语句的个数 show global status like '%slow%';
上述命令只对当前生效,当MySQL重启失效,如果要永久生效,需要配置my.cnf
通用查询
相关参数
//可以看到通用查询的状态和存储路径
show variables like '%general%';
![](https://img.haomeiwen.com/i7634890/b381e5b5ebeed65a.png)
//查看当前通用查询日志输出的格式
//FILE(存储在数数据库的数据文件中的hostname.log)
//或者TABLE(存储在数据库中的mysql.general_log)
show variables like '%log_output%';
![](https://img.haomeiwen.com/i7634890/3558888377131f89.png)
开启通用日志查询: set global general_log=on;
关闭通用日志查询: set globalgeneral_log=off;
设置通用日志输出为表方式: set global log_output='TABLE';
设置通用日志输出为文件方式: set global log_output='FILE';
设置通用日志输出为表和文件方式:'set global log_output='TABLE,FILE';'
上述命令只对当前生效,当MySQL重启失效,如果要永久生效,需要配置my.cnf
网友评论