MyBatis-Plus(十八)结合P6Spy进行SQL性能分析

结合P6Spy进行SQL性能分析

P6Spy 是一个可以用来在应用程序中拦截和修改数据操作语句的开源框架。 通过 P6Spy 我们可以对 SQL 语句进行拦截,相当于一个 SQL 语句的记录器,这样我们可以用它来作相关的分析,比如性能分析。

注意:该插件有性能损耗,建议平时开发测试时使用,不建议生产环境使用。

1、安装配置

  1. 首先编辑项目的 pom.xml 文件,加入 p6spy 依赖:
<dependency>
    <groupId>p6spygroupId>
    <artifactId>p6spyartifactId>
    <version>3.9.0version>
dependency>
  1. 接着编辑 application.properties 文件,更换数据库连接驱动

P6Spy 工作原理P6Spy 通过劫持 JDBC 驱动,在调用实际 JDBC 驱动前拦截调用的目标语,达到 SQL 语句日志记录的目的。

spring.datasource.driver-class-name=com.p6spy.engine.spy.P6SpyDriver
spring.datasource.url=jdbc:p6spy:mysql://localhost:3306/dev?serverTimezone=Asia/Shanghai
spring.datasource.username=root
spring.datasource.password=123456
  1. 最后创建 spy.properties 配置文件即可:
#3.2.1以上使用
modulelist=com.baomidou.mybatisplus.extension.p6spy.MybatisPlusLogFactory,com.p6spy.engine.outage.P6OutageFactory
# 自定义日志打印
logMessageFormat=com.baomidou.mybatisplus.extension.p6spy.P6SpyLogger
#日志输出到控制台
appender=com.baomidou.mybatisplus.extension.p6spy.StdoutLogger
# 使用日志系统记录 sql
#appender=com.p6spy.engine.spy.appender.Slf4JLogger
# 设置 p6spy driver 代理
deregisterdrivers=true
# 取消JDBC URL前缀
useprefix=true
# 配置记录 Log 例外,可去掉的结果集有error,info,batch,debug,statement,commit,rollback,result,resultset.
excludecategories=info,debug,result,commit,resultset
# 日期格式
dateformat=yyyy-MM-dd HH:mm:ss
# 实际驱动可多个
#driverlist=org.h2.Driver
# 是否开启慢SQL记录
outagedetection=true
# 慢SQL记录标准 2 秒
outagedetectioninterval=2

2、开始测试

  1. 我们使用 Mybatis-Plus 执行一个简单的查询操作:
List<User> users = userMapper.selectList(null);

MyBatis-Plus(十八)结合P6Spy进行SQL性能分析_第1张图片

3、进阶技巧

1. 使用日志系统记录 sql

​ 1. 上面的样例配置,我们是直接将日志输出到控制台,我们可以修改 appender 配置属性,使用日志系统记录 sql

MyBatis-Plus(十八)结合P6Spy进行SQL性能分析_第2张图片

​ 2. 再次执行查询,可以看到现在改用日志系统记录 sql 了:

MyBatis-Plus(十八)结合P6Spy进行SQL性能分析_第3张图片

2. 将日志输出到文件

也可以修改 appender 配置属性,将日志输出到文件中:

#日志输出到文件
appender=com.p6spy.engine.spy.appender.FileLogger
# 指定 Log 的文件名 默认 spy.log
logfile=spy.log
# 指定是否每次是增加 Log,设置为 false 则每次都会先进行清空 默认true
append=true

3.自定义日志格式

​ 1. 如果觉得默认的日志格式不合适,我们也可以使用 logMessageFormatcustomLogMessageFormat 这两个配置参数来自定义日志输出格式:

可用的变量为:

  • %(connectionId):connection id
  • %(currentTime):当前时间
  • %(executionTime):执行耗时
  • %(category):执行分组
  • %(effectiveSql):提交的 SQL 换行
  • %(effectiveSqlSingleLine):提交的 SQL 不换行显示
  • %(sql):执行的真实 SQL 语句,已替换占位
  • %(sqlSingleLine):执行的真实 SQL 语句,已替换占位不换行显示
logMessageFormat=com.p6spy.engine.spy.appender.CustomLineFormat
customLogMessageFormat=%(currentTime) | SQL耗时: %(executionTime) ms | 连接信息: %(category)-%(connectionId) | 执行语句: %(sql)

在这里插入图片描述

点击跳转至原文地址

--------------最后感谢大家的阅读,愿大家技术越来越流弊!--------------

在这里插入图片描述

--------------也希望大家给我点支持,谢谢各位大佬了!!!--------------

你可能感兴趣的:(MyBatis-Plus)