慢查询
大约 1 分钟编程语言数据库mysql
概述
在 SpringBoot 项目中要记录 MySQL慢查询,一般常用的方式有两种,第一种通过MySQL本身的慢查询日志配置来进行记录,第二种是在Spring ` Boot应用中通过数据库连接池的日志功能来完成记录。下面我们就来详细介绍一下这两种方式。
MySQL本身的慢查询1/2
通常情况下,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 # 超过2秒视作慢查询
log_queries_not_using_indexes = 1 # 记录未使用索引的查询
修改配置文件后记得要重启 MySQL,可通过命令 cat /var/log/mysql/mysql-slow.log 查看慢查询日志
通过连接池查看慢查询2/2
SpringBoot 默认情况下使用 HikariCP 作为连接池,我们可以通过配置 HikariCP 的日志属性来记录慢查询操作,如下所示
spring:
datasource:
hikari:
data-source-properties:
logger: Slf4JLogger
slowQueryThresholdMillis: 2000 # 超过2000毫秒视作慢查询
需要借助 P6Spy 拦截并记录慢查询,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
