一、前言

对于架构师或技术经理,可能遇到比较多的就是性能的优化,优化最多的也就是数据库查询语句的快慢。产品在运行期间,我们是无法得知每个用户的体验如何,因为影响体验的因素很多,比如单方面的网络吞吐延迟,高并发下的排队延迟,程序本身的接口处理逻辑耗时+SQL检索的耗时。在排除用户本地网络延迟的问题外,其他的问题,基本是由我们产品服务器应该优化的。本次要讲的就是SQL检索耗时。

要怎么才能知道哪些SQL语句消耗比较长的时间呢?这就需要用到数据库的日志记录了。

二、开启操作

1、查询是否开启慢查询

以下显示OFF代表并没有开启慢查询。

mysql> show variables like 'slow_query%';+---------------------------+----------------------------------+| Variable_name | Value |+-----------------+-----------+| slow_query_log | OFF|+-----------------+-----------+| slow_query_log_file | YH-20161209QIZC-slow.log |+-----------------+-----------+

2、开启慢查询

mysql> set global slow_query_log='ON';

3、设置日志存放位置(位置随便你定)

mysql> set global slow_query_log_file='/usr/local/mysql/data/slow.log';

4、设置慢查询时间(代表查询超过1秒的都记录到日志中)

mysql> set global long_query_time=1;

三、验证

设置完后,可以执行以下语句

SHOW VARIABLES LIKE '%quer%';




mysql8开启慢SQL mysql 打开慢查询_mysql


slow_query_log:慢查询日志开启状态(ON:开启;OFF:关闭)

slow_query_log_file:慢查询日志存放地址

long_query_time:慢查询时间

你可以找一张比较大的表,做一次select * from 表名 如果有超过1秒的查询。你就可以去看一下日志地址中的slow.log大小是否变化,更新时间是否有变。若有说明已经记录下来。到此慢查询日志就介绍完了,这是在项目运行期间开启会比较有效果,当用户在使用时,会进行业务操作,每次的业务数据查询都会进行慢查询记录,你可以一天或偶尔去看一下日志情况。如果你比较慢麻烦,也可以做一个日志监控系统,采用flume进行日志文件的监听,也可以使用zk监听,一旦有变化,将可实时记录并通知给相关负责人员。