优秀的编程知识分享平台

网站首页 > 技术文章 正文

Spring Boot中如何对MySQL中的慢查询SQL进行记录?

nanyue 2024-07-30 03:30:33 技术文章 11 ℃

在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中最为基础的慢查询记录方式。

最近发表
标签列表