在开发和调试过程中,查看完整、可直接执行的 SQL 是定位问题、优化性能最关键的环节。MyBatis-Plus 原生日志仅输出带占位符的 SQL,而集成 p6spy 组件后,可自动打印完整可执行 SQL、统计执行耗时、监控慢查询,极大提升开发效率
p6spy 是一款基于 JDBC 驱动代理的 SQL 监控工具,它无缝拦截应用与数据库之间的 JDBC 调用,无侵入式打印真实可执行 SQL,并统计执行耗时。
打印完整可执行 SQL(自动替换占位符)
统计SQL 执行耗时
慢 SQL 监控告警
自定义日志格式与输出方式
支持过滤指定表 / 指定类型的 SQL
兼容所有 JDBC 规范的数据库(MySQL、PostgreSQL、Oracle 等)
<dependency>
<groupId>com.github.gavlyukovskiy</groupId>
<artifactId>p6spy-spring-boot-starter</artifactId>
<version>2.0.0</version>
</dependency>decorator:
datasource:
p6spy:
# 自定义日志格式(耗时 || SQL)
log-format: "\n Execution Time: %(executionTime) ms || SQL: %(sql)\n"
# 开启慢 SQL 日志
slow-sql:
enable: true
# 慢 SQL 阈值(毫秒)
threshold: 2000
# 慢 SQL 日志级别
log-level: warn启动项目后,控制台直接输出可执行 SQL + 耗时:
# 原生日志(无法直接使用)
Preparing: select * from user where id = ?
Parameters: 1(Long)
# p6spy 日志(直接复制到数据库运行)
Execution Time: 12 ms || SQL: select * from user where id = 1在 excludecategories 中增加 commit:
excludecategories=info,debug,result,resultset,commit移除 excludecategories 中的 batch:
# 错误(包含 batch)
excludecategories=info,debug,batch
# 正确(不包含 batch)
excludecategories=info,debug,result使用 MyBatis-Plus 提供的 MybatisPlusLogFactory(3.2.1+ 支持),已在标准配置中默认配置。
指定控制台编码,或在启动参数添加:
-Dfile.encoding=UTF-8开发 / 测试环境:推荐开启,方便调试与优化
生产环境:建议关闭,p6spy 会带来轻微性能损耗
生产监控优先使用:SkyWalking、Pinpoint、Prometheus 等专业 APM 工具
慢 SQL 阈值设置为 2 秒,及时发现性能瓶颈
过滤日志表、临时表,减少无用输出
结合 MP 分页插件,优化慢查询 SQL
p6spy 是 MyBatis-Plus 开发必备工具,解决原生日志无法查看完整 SQL 的痛点
两种集成方式:标准配置(灵活)、starter 配置(简洁)
核心配置只需修改:驱动类 + URL 前缀 + 日志格式
支持慢 SQL 监控、SQL 过滤、自定义格式
开发环境强烈推荐,生产环境谨慎开启