在SpringBoot项目中要记录MySQL慢查询,一般常用的方式有两种,第一种通过MySQL本身的慢查询日志配置来进行记录,第二种是在Spring Boot应用中通过数据库连接池的日志功能来完成记录。下面我们就来详细介绍一下这两种方式。
通过MySQL本身的慢查询日志配置
通常情况下,MySQL的配置文件是位于/etc/mysql/my.cnf或/etc/my.cnf中,然后需要开启慢查询的话可以通过如下的配置来实现。
[mysqld]
slow_query_log = 1
slow_query_log_file = /var/log/mysql/mysql-slow.log
long_query_time = 2
log_queries_not_using_indexes = 1
- slow_query_log:启用慢查询日志。
- slow_query_log_file:指定慢查询日志文件的位置。
- long_query_time:设置查询超过多少秒被视为慢查询。
- log_queries_not_using_indexes:记录未使用索引的查询。
然后重新启动MySQL的服务器来使得MySQL服务配置生效
service mysql restart
可以通过以下命令查看慢查询日志,如下所示。
cat /var/log/mysql/mysql-slow.log
在Spring Boot应用中记录慢查询
使用HikariCP连接池记录慢查询
Spring Boot默认情况下使用HikariCP作为连接池,我们可以通过配置HikariCP的日志属性来记录慢查询操作,如下所示。
spring:
datasource:
hikari:
data-source-properties:
logger: Slf4JLogger
slowQueryThresholdMillis: 2000
- logger=Slf4JLogger:使用Slf4J记录日志。
- slowQueryThresholdMillis=2000:设置查询超过多少毫秒被视为慢查询。
配置日志记录
在yml配置文件中添加日志级别记录,如下所示,开启DUBUG级别日志。
logging:
level:
com.zaxxer.hikari.HikariPool: DEBUG
使用P6Spy拦截SQL并记录慢查询
在pom.xml文件中添加以下依赖
<dependency>
<groupId>p6spy</groupId>
<artifactId>p6spy</artifactId>
<version>3.9.1</version>
</dependency>
然后在src/main/resources/p6spy.properties文件并添加以下内容,用来记录MySQL的慢查询操作。
modulelist=com.p6spy.engine.spy.P6SpyFactory
filter=true
logfile=spy.log
logMessageFormat=com.p6spy.engine.spy.appender.SingleLineFormat
appender=com.p6spy.engine.spy.appender.Slf4JLogger
customLogMessageFormat=%(currentTime)|%(executionTime)|%(category)|connection%(connectionId)|%(sqlSingleLine)
executionThreshold=2000
然后需要在在SpringBoot的配置文件中添加P6Spy数据源的配置。
spring:
datasource:
url: jdbc:p6spy:mysql://localhost:3306/yourdb
driver-class-name: com.p6spy.engine.spy.P6SpyDriver
总结
通过上面的这些方法,可以实现在SpringBoot应用程序中记录慢查询操作,当然现在在很多的场景中我们也可以选择其他的方式,例如Druid、MyBatis拦截器等等来记录慢查询操作。选择具体的方法取决于你的需求和项目架构,上面提到的几种方式只是在SpringBoot中最为基础的慢查询记录方式。