Logo
SQL 日志

SQL 日志 #

本文档整理 DBPlusEngine / ShardingSphere 中三类与 SQL 打印相关的日志:核心 SQL Show 日志、SQL Federation 日志、慢 SQL / SQL 耗时日志。

核心 SQL Show 日志 #

触发条件 #

  • sql-show=true 时打印 SQL 日志。
  • sql-simple=true 时,真实 SQL 以简化形式打印。
  • 日志 topic 为 org.apache.shardingsphere.sql
  • 日志级别为 INFO

日志内容 #

  • Logic SQL: {}
    • 打印用户提交的逻辑 SQL。
  • Actual SQL(simple): {} ::: {}
    • 简化模式下打印涉及的数据源集合和执行单元数量。
  • Actual SQL: {} ::: {}
    • 打印真实数据源和改写后的真实 SQL。
  • Actual SQL: {} ::: {} ::: {}
    • 打印真实数据源、真实 SQL 和参数。

作用 #

  • 用于定位 SQL 路由和改写结果是否符合预期。
  • 对比逻辑 SQL 与真实 SQL,便于排查分片、读写分离、加密、影子库等规则对 SQL 的影响。
  • 在生产问题排查中,可以确认 SQL 实际被发送到哪些数据源以及实际执行的 SQL 内容。
  • sql-simple=true 适合降低日志量,只观察真实 SQL 分布和执行单元数量。

SQL Federation 日志 #

触发条件 #

  • sql-show=true 时打印 SQL Federation 相关日志。
  • 日志级别为 INFO

日志内容 #

  • SQL Federation Logic SQL: {} ::: {} ::: {}
    • 打印 SQL Federation 逻辑 SQL、当前数据库名和当前 schema 名。
  • SQL Federation Logic SQL: {} ::: {} ::: {} ::: {}
    • 在存在参数时,额外打印 SQL 参数。
  • SQL Federation Execution Plan: {}
    • 打印 SQL Federation 生成的执行计划。

作用 #

  • 用于确认 SQL 是否进入 SQL Federation 执行链路。
  • 帮助排查跨库查询、复杂查询下的逻辑 SQL、参数、当前数据库和 schema 上下文。
  • 执行计划日志可用于分析 SQL Federation 的物理计划,辅助定位计划生成、优化或执行阶段的问题。

慢 SQL / SQL 耗时日志 #

触发条件 #

  • SQL 总耗时达到 longQueryTime 阈值。
  • 当前上下文中存在已记录的 SQL。
  • 日志级别为 INFO

日志内容 #

  • 单条 SQL:
    • SQL execution cost time record, totalCost: {} parse: {} execution: {} [ route: {} rewrite: {} executionPrepare: {} executionUnits: {} merge: {} ] logicSQL: {}
  • 多条 SQL:
    • SQL execution cost time record, totalCost: {} parse: {} execution: {} [ route: {} rewrite: {} executionPrepare: {} executionUnits: {} merge: {} ] logicSQLs: {}

作用 #

  • 用于分析慢 SQL 在 ShardingSphere 执行链路中的耗时分布。
  • 将总耗时拆分为解析、路由、改写、执行准备、执行单元执行、结果归并等阶段。
  • 帮助判断性能瓶颈发生在 SQL 解析、路由改写、数据库执行还是结果归并阶段。
  • 对多 SQL 场景,会打印 logicSQLs,便于将耗时记录和对应 SQL 集合关联起来。