SpringBoot整合P6Spy实现全链路SQL监控

一、p6spy核心作用
  1. 完整SQL捕获:输出带实际参数的SQL语句,无需手动拼接

  2. 性能分析:精确记录每条SQL执行耗时

  3. 慢查询检测:支持阈值配置自动标记慢SQL(如 >2s)

  4. ORM调试:验证MyBatis等框架生成的SQL

二、集成步骤
  1. 添加依赖(关键依赖):

   <dependency>
       <groupId>p6spy</groupId>
       <artifactId>p6spy</artifactId>
       <version>3.9.1</version>
   </dependency>
   <!-- MyBatis Plus需额外添加 -->
   <dependency>
       <groupId>com.baomidou</groupId>
       <artifactId>mybatis-plus-p6spy</artifactId>
   </dependency>
  1. 配置数据源(关键改动):

   spring:
     datasource:
       driver-class-name: com.p6spy.engine.spy.P6SpyDriver # 替换驱动
       url: jdbc:p6spy:mysql://localhost:3306/db # URL添加p6spy前缀
  1. 创建日志格式化类(可选增强):

   public class CustomP6SpyLogger implements MessageFormattingStrategy {
       @Override
       public String formatMessage(...) {
           // 示例:添加ANSI颜色/格式化日期参数
           return String.format("\u001B[33m%s | 耗时:%dms | SQL:\u001B[32m%s\u001B[0m", 
                                now, elapsed, formattedSql);
       }
   }
  1. 配置spy.properties(核心配置):

   # 日志输出方式
   appender=com.p6spy.engine.spy.appender.StdoutLogger
   # 自定义格式化类
   logMessageFormat=com.example.CustomP6SpyLogger
   # 慢SQL检测(2秒阈值)
   outagedetection=true
   outagedetectioninterval=2
   # 排除无关日志
   excludecategories=info,debug,resultset
三、注意事项
  1. 版本兼容:MySQL 8.x需使用p6spy 3.9.x

  2. 性能损耗:增加约5%-10%开销,生产环境建议:
    • 关闭常规监控

    • 仅启用慢查询检测

  3. 文件位置spy.properties必须放在src/main/resources

  4. 日志优化:通过excludecategories过滤非SQL日志

四、效果演示

控制台输出示例:

2023-05-01 12:30:45 | 耗时: 148ms | SQL: SELECT * FROM user WHERE create_time > '2023-01-01 00:00:00'

可直接拷贝SQL到数据库客户端执行

五、总结

p6spy解决了开发中的两大痛点:

  1. 直观获取完整SQL:摆脱参数占位符拼接

  2. 精准定位慢查询:通过耗时监控优化数据库性能 建议在开发/测试环境启用,生产环境按需使用慢查询监控功能。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

javachen__

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值