IDEA 控制台打印 Explain 问题排查(RestfulBox版)

目录

  • 问题排查
  • 知识扩展
    • [1. -javaagent:...\mysql-explain-agent-1.2.0-with-dependencies.jar](#1. -javaagent:...\mysql-explain-agent-1.2.0-with-dependencies.jar)
    • [2. -Dmysql.showSQL=false](#2. -Dmysql.showSQL=false)
    • [3. -Dmysql.showSQL.filter=](#3. -Dmysql.showSQL.filter=)
    • [4. -Dmysql.explain.filter=INSERT,UPDATE,DELETE](#4. -Dmysql.explain.filter=INSERT,UPDATE,DELETE)
    • [5. -Dmysql.explain.types=ALL](#5. -Dmysql.explain.types=ALL)
    • [6. -Dmysql.explain.extras=Using filesort,Using temporary](#6. -Dmysql.explain.extras=Using filesort,Using temporary)

问题排查

问题描述:在近期更新 idea 插件并重启 idea 后,启动项目疯狂打印 explain 日志,项目中未配置但仍然打印。

原因分析:

  • 安装了插件 RestfulBox,在近期更新为版本 6.10.0 后,默认启用 Explain 日志

解决方案:idea -> Settings -> RestfulBox -> Java Tool -> MySQL EXPLAIN -> 取消勾选启用

知识扩展

shell 复制代码
"-javaagent:C:\Users\***\AppData\Roaming\JetBrains\IntelliJIdea2024.3\plugins\RestfulBox\lib\mysql-explain-agent-1.2.0-with-dependencies.jar"
"-Dmysql.showSQL=false"
"-Dmysql.showSQL.filter="
"-Dmysql.explain.filter=INSERT,UPDATE,DELETE"
"-Dmysql.explain.types=ALL"
"-Dmysql.explain.extras=Using filesort,Using temporary"

配置说明:

1. -javaagent:...\mysql-explain-agent-1.2.0-with-dependencies.jar

  • 作用:以 Java Agent 方式挂载一个字节码增强代理。

  • 功能:该 Agent 会拦截应用中所有 JDBC 执行的 SQL 语句,并根据后续配置决定是否:

    • 打印原始 SQL
    • 自动执行 EXPLAIN 分析执行计划
    • 过滤特定类型的 SQL
  • 来源 :这是 RestfulBox 插件 (一款 IDEA 中用于 API 调试和数据库分析的工具)自带的诊断模块,仅在开发阶段通过 IDEA 启动时生效,不影响生产部署。

✅ 本质:一个开发辅助工具,用于实时分析 SQL 性能。


2. -Dmysql.showSQL=false

  • 作用 :关闭 SQL 打印。

  • 说明 :

    • 如果设为 true,会在控制台打印所有被拦截的 SQL 语句。
    • 设为 false 后,既不打印 SQL,也不执行 EXPLAIN(因为 EXPLAIN 是基于 SQL 触发的)。
  • ✅ 这是最直接关闭 EXPLAIN 日志的方式。

💡 即使其他 explain.* 配置存在,只要 showSQL=false,就不会做任何分析。


3. -Dmysql.showSQL.filter=

  • 作用 :设置 SQL 打印的过滤规则(排除某些 SQL)。

  • 格式 :逗号分隔的关键词列表,如 QRTZ_,COUNT(0)。

  • 当前值为空 :表示 不过滤任何 SQL (但因为 showSQL=false,此配置实际未生效)。

  • 示例:

  • 若设为 QRTZ_,则包含 QRTZ_ 的 SQL(如 Quartz 表查询)不会被打印或分析。


4. -Dmysql.explain.filter=INSERT,UPDATE,DELETE

  • 作用 :跳过对指定类型 SQL 的 EXPLAIN 分析。

  • 原理 :

    • EXPLAIN 只对 SELECT 有效,对 INSERT/UPDATE/DELETE 执行会报错或无意义。
    • 此配置表示:遇到这三类语句,不执行 EXPLAIN。
  • 注意 :

    • SELECT 不在此列表中 → 所有 SELECT 仍会被分析(前提是 showSQL=true)。

    • 如果你想完全关闭 EXPLAIN,应设为:

      bash 复制代码
      -Dmysql.explain.filter=SELECT,INSERT,UPDATE,DELETE

      或更简单:直接用

      bash 复制代码
      -Dmysql.showSQL=false

5. -Dmysql.explain.types=ALL

  • 作用 :只对执行计划中 type 列满足条件的 SQL 输出警告或高亮。

  • 可选值(MySQL EXPLAIN 的 type 字段):

    • system < const < eq_ref < ref < range < index < ALL
    • ALL 表示全表扫描(性能最差)
  • 当前值 ALL :表示 只要执行计划中出现 type=ALL,就标记为需优化。

  • 用途:帮助开发者快速发现全表扫描的慢查询。

⚠️ 此配置 不影响是否执行 EXPLAIN,只影响分析结果的判断逻辑。


6. -Dmysql.explain.extras=Using filesort,Using temporary

  • 作用 :只对执行计划中 Extra 列包含指定内容的 SQL 发出警告。

  • 常见 Extra 值:

    • Using filesort:需要额外排序(无索引支持 ORDER BY)
    • Using temporary:使用临时表(常见于 GROUP BY + ORDER BY 不一致)
    • 这两者通常意味着 性能瓶颈
  • 当前配置:当 EXPLAIN 结果包含这两项时,工具会高亮提示。

⚠️ 同样,此配置 仅用于分析结果过滤,不控制是否执行 EXPLAIN。

相关推荐
SimonKing1 小时前
Workbuddy太占C盘空间了,写个迁移工具迁走10G的数据
java·后端·程序员
Hvitur1 小时前
Java - Lambda
java·开发语言·python
apcipot_rain6 小时前
C++转Java日记(06)
java·开发语言
金銀銅鐵11 小时前
带您看懂字节码指令(一):一帧里有什么
java·后端·ai编程
nice_lcj52013 小时前
【从零理解 Spring AI · 14】RAG 的四个环节:加载、切分、向量化、检索
java·spring boot·embedding·向量数据库·rag·spring ai·ai应用开发
学长毕设14 小时前
基于springboot科创竞赛信息平台-附源码
java·spring boot·后端
聪明的笨猪猪15 小时前
Java 工程案例:AI 生成 @Async 异步线程池踩坑
java·经验分享·面试·ai编程
学长毕设15 小时前
基于SpringBoot公务员考试交流平台-附源码
java·spring boot·后端
SL_staff17 小时前
私有化低代码:面向强监管行业的可控数字化实践
java·低代码
三翼鸟数字化技术团队18 小时前
高性能存储引擎RocksDB:原理与Java生态实践
java