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 集合关联起来。