🎉🎉《Spring Boot实战案例合集》目前已更新128个案例,我们将持续不断的更新。文末有电子书目录。
💪💪永久更新承诺
我们郑重承诺,所有订阅合集的粉丝都将享受永久免费的后续更新服务。
💌💌如何获取
订阅我们的合集《点我订阅》,并通过私信联系我们,我们将第一时间将电子书发送给您。
环境:SpringBoot3.4.2
1. 简介
慢SQL指查询执行时间超出合理阈值(如数百毫秒以上)的语句,常因索引缺失、复杂联表、全表扫描或数据量激增导致。其直接影响包括响应延迟飙升、吞吐量骤降、系统资源(CPU/IO)耗尽,甚至引发服务雪崩。
我们可以使用第三方的组件(如:p6spy)来记录sql的执行情况,找出哪些SQL是慢SQL,有关该组件的详细使用请查看下面这篇文章:
为实现技术能力进阶,我们自主开发了一个组件实现慢 SQL 监控。该组件支持JDBC、MyBatis 及 JPA 的 SQL 执行过程进行无侵入拦截,通过代理技术捕获数据库操作。当 SQL 执行耗时超过预设阈值(如 500ms)时,组件自动触发日志记录,输出结构化监控信息,涵盖 完整 SQL 语句(含参数占位符及实际值)、执行耗时等关键信息进行记录,为性能分析提供全链路数据支撑。
如下最终效果:
21:53 WARN [main] pack.ps.handler Line:47 ----------------------------SQL Execution Details---------------------------SQL: select * from p_user where name = ? or age = ?Parameters: [张三, 33]Slow SQL: trueExecution Time: 1669ms---------------------------
以上实现不需要对现有的业务逻辑进行任何的修改。
2.1 定义可配置信息
@Component@ConfigurationProperties(prefix = "pack.sql")public class SqlProperties {/**是否显示SQL*/private boolean showSql = true ;/**是否显示执行SQL动态参数*/private boolean showParam = false ;/**是否显示慢SQL*/private boolean slowSql = false ;/**慢SQL所执行时间的阈值*/private int slowSqlThreshold = 1000 ;// getters, setters}
配置文件
pack:sql:show_sql: trueshow_param: trueslow_sql: true# 单位毫秒slow_sql_threshold: 1000


