RuoYi-Cloud-Plus SQL监控:p6spy配置详解

RuoYi-Cloud-Plus SQL监控:p6spy配置详解

【免费下载链接】RuoYi-Cloud-Plus 微服务管理系统 重写RuoYi-Cloud所有功能 整合 SpringCloudAlibaba、Dubbo3.0、Sa-Token、Mybatis-Plus、MQ、Warm-Flow工作流、ES、Docker 全方位升级 定期同步 【免费下载链接】RuoYi-Cloud-Plus 项目地址: https://gitcode.com/dromara/RuoYi-Cloud-Plus

前言:为什么需要SQL监控?

在日常开发中,SQL性能问题往往是系统瓶颈的主要来源。你是否遇到过这样的困扰:

  • SQL执行缓慢,但不知道具体哪条语句耗时
  • 生产环境出现性能问题,却无法快速定位SQL瓶颈
  • 复杂的多表关联查询,难以分析执行计划和参数绑定
  • 需要监控SQL执行情况,但不想修改业务代码

RuoYi-Cloud-Plus集成的p6spy正是解决这些痛点的利器!本文将详细介绍如何在RuoYi-Cloud-Plus中配置和使用p6spy进行SQL监控。

p6spy简介

p6spy是一个开源的JDBC驱动代理框架,它能够拦截和记录所有通过JDBC执行的SQL语句,包括:

  • 完整的SQL语句(含参数值)
  • 执行时间统计
  • 连接信息
  • 执行结果

核心优势

特性描述优势
无侵入性只需修改JDBC URL,无需改动业务代码部署简单,风险低
完整SQL输出显示真实的参数值而非占位符便于调试和分析
性能监控记录每个SQL的执行时间快速定位性能瓶颈
多格式输出支持控制台、文件、Slf4J等多种输出方式灵活适配各种环境

RuoYi-Cloud-Plus中的p6spy配置

1. 依赖配置

在项目根目录的pom.xml中已经集成了p6spy依赖:

<properties>
    <p6spy.version>3.9.1</p6spy.version>
</properties>

<dependencies>
    <dependency>
        <groupId>p6spy</groupId>
        <artifactId>p6spy</artifactId>
        <version>${p6spy.version}</version>
    </dependency>
</dependencies>

2. 数据源配置

在Nacos配置中心的datasource.yml中启用p6spy:

spring:
  datasource:
    dynamic:
      # 性能分析插件(有性能损耗 不建议生产环境使用)
      p6spy: true

3. p6spy配置文件

项目在ruoyi-common/ruoyi-common-mybatis/src/main/resources/目录下提供了spy.properties配置文件:

# p6spy 性能分析插件配置文件
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
#appender=com.p6spy.engine.spy.appender.Slf4JLogger

配置详解

核心配置项说明

mermaid

1. modulelist 模块配置

modulelist=com.baomidou.mybatisplus.extension.p6spy.MybatisPlusLogFactory,com.p6spy.engine.outage.P6OutageFactory
  • MybatisPlusLogFactory: MyBatis-Plus专用的日志工厂,提供更好的格式化和MyBatis-Plus特性支持
  • P6OutageFactory: 超时检测模块,可以检测SQL执行超时情况

2. logMessageFormat 日志格式

logMessageFormat=com.baomidou.mybatisplus.extension.p6spy.P6SpyLogger

使用MyBatis-Plus优化的日志格式,输出信息更加清晰易读。

3. appender 输出方式

# 控制台输出(开发环境推荐)
appender=com.baomidou.mybatisplus.extension.p6spy.StdoutLogger

# 日志文件输出(生产环境推荐)
#appender=com.p6spy.engine.spy.appender.Slf4JLogger

# 文件输出(自定义文件路径)
#appender=com.p6spy.engine.spy.appender.FileLogger
#logfile=spy.log

实战配置示例

开发环境配置(推荐)

# 开发环境 - 控制台输出
modulelist=com.baomidou.mybatisplus.extension.p6spy.MybatisPlusLogFactory
logMessageFormat=com.baomidou.mybatisplus.extension.p6spy.P6SpyLogger
appender=com.baomidou.mybatisplus.extension.p6spy.StdoutLogger

# 是否显示连接信息
executionThreshold=10

生产环境配置

# 生产环境 - 文件输出
modulelist=com.baomidou.mybatisplus.extension.p6spy.MybatisPlusLogFactory
logMessageFormat=com.baomidou.mybatisplus.extension.p6spy.P6SpyLogger
appender=com.p6spy.engine.spy.appender.Slf4JLogger

# 只记录执行时间超过100ms的SQL
executionThreshold=100
filter=true

高级监控配置

# 高级监控配置
modulelist=com.baomidou.mybatisplus.extension.p6spy.MybatisPlusLogFactory,com.p6spy.engine.outage.P6OutageFactory

logMessageFormat=com.baomidou.mybatisplus.extension.p6spy.P6SpyLogger
appender=com.p6spy.engine.spy.appender.Slf4JLogger

# 超时检测配置(单位:秒)
outagedetection=true
outagedetectioninterval=30

# 执行时间阈值(单位:毫秒)
executionThreshold=50

# 是否过滤空语句
filter=true

SQL监控输出示例

启用p6spy后,控制台将输出格式化的SQL信息:

-- 示例输出格式:
Consume Time:15 ms 2023-01-01 10:00:00
Execute SQL:SELECT * FROM sys_user WHERE user_id = 1 AND status = 1

-- 包含执行计划的详细输出:
Consume Time:32 ms 2023-01-01 10:00:01
Execute SQL:INSERT INTO sys_log (module, action, user_id) VALUES ('用户管理', '新增用户', 1001)
Affected Lines:1

性能优化建议

1. 生产环境注意事项

mermaid

2. 监控策略表

环境推荐配置执行阈值输出方式说明
开发环境全量监控0ms控制台便于调试,实时查看SQL
测试环境选择性监控50ms文件记录性能问题SQL
预生产环境性能监控100msSlf4J监控潜在性能问题
生产环境关键监控200ms文件仅记录慢查询,避免性能影响

3. 动态开关配置

在Nacos中可以通过环境变量动态控制p6spy:

spring:
  datasource:
    dynamic:
      p6spy: ${P6SPY_ENABLED:false}

这样可以通过环境变量P6SPY_ENABLED来动态启用或禁用p6spy监控。

常见问题排查

1. p6spy未生效

检查步骤:

  1. 确认datasource.ymlp6spy: true
  2. 确认spy.properties文件存在且配置正确
  3. 检查JDBC URL是否包含p6spy驱动

2. 性能影响过大

解决方案:

  • 增加executionThreshold阈值,只记录慢SQL
  • 生产环境考虑禁用或使用采样监控

3. 日志输出过多

调整策略:

  • 使用filter=true过滤空语句
  • 调整日志级别为WARN或ERROR

总结

RuoYi-Cloud-Plus通过p6spy提供了强大的SQL监控能力,帮助开发者:

  1. 快速定位性能瓶颈 - 精确到毫秒的SQL执行时间监控
  2. 完整SQL调试 - 显示真实的参数值,便于问题复现
  3. 无侵入集成 - 只需配置开关,无需修改业务代码
  4. 多环境适配 - 支持开发、测试、生产等不同环境的监控策略

通过合理的配置,p6spy可以成为微服务开发中不可或缺的SQL监控工具,大幅提升系统性能和开发调试效率。

提示:生产环境使用时请谨慎评估性能影响,建议通过阈值过滤只记录慢查询SQL。

【免费下载链接】RuoYi-Cloud-Plus 微服务管理系统 重写RuoYi-Cloud所有功能 整合 SpringCloudAlibaba、Dubbo3.0、Sa-Token、Mybatis-Plus、MQ、Warm-Flow工作流、ES、Docker 全方位升级 定期同步 【免费下载链接】RuoYi-Cloud-Plus 项目地址: https://gitcode.com/dromara/RuoYi-Cloud-Plus

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

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

抵扣说明:

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

余额充值