执行计划变化会导致输出结果顺序不同吗

【 使用环境 】生产环境
【 OB or 其他组件 】OB
【 使用版本 】4.2.1.7
【问题描述】a, b两表关联查询,走HASH JOIN ,a表走TABLE RANGE SCAN,b表走TABLE FULL SCAN,输出结果字段a.id 是按大到小输出,走NESTED-LOOP JOIN a表走TABLE RANGE SCAN, b表走DISTRIBUTED TABLE RANGE SCAN,输出结果字段a.id 是按小到大输出
【复现路径】问题出现前后相关操作
【附件及日志】推荐使用OceanBase敏捷诊断工具obdiag收集诊断信息,详情参见链接(右键跳转查看):

【SOP系列 22 】——故障诊断第一步(自助诊断和诊断信息收集)

【备注】基于 LLM 和开源文档 RAG 的论坛小助手已开放测试,在发帖时输入 [@论坛小助手] 即可召唤小助手,欢迎试用!

在这个问题中,您提到的是执行计划的变化导致了查询结果字段 a.id 的输出顺序发生了变化。这可能是由于优化器选择了不同的执行计划,而这种变化影响了最终的输出顺序。为了更好地理解这个问题并找到解决方案,我们可以先使用 obdiag 工具来采集 SQL 相关的日志和性能信息,然后进行进一步的分析。

推荐使用的 obdiag 命令

日志采集场景: SQL 性能问题

日志采集命令:

obdiag gather scene run --scene=observer.perf_sql --env "{db_connect='-h127.0.0.1 -P2881 -utest@test -p****** -Dtest', trace_id='Yxx'}"

这个命令将帮助我们收集与 SQL 性能相关的日志,包括执行计划的变化和其他可能影响性能的因素。

为了更好地帮助您,请提供以下信息:

  1. 您能否提供具体的 SQL 查询语句,包括 a 表和 b 表的定义?
  2. 您能否提供执行计划变化前后的 EXPLAIN 输出?
  3. 您是否启用了任何特定的优化器参数或配置?
  4. 您是否有任何其他相关信息,例如表的数据量、索引情况等?

通过这些信息,我们可以更准确地分析问题的原因,并提供相应的解决方案。如果您能将 obdiag 采集的日志压缩包提供给我们,我们将能够更深入地进行诊断。

附上敏捷诊断工具 obdiag 使用帮助链接

原sql如果未对结果进行排序,是会有这种情况

sql中没有指定order,这种情况是什么原因导致的啊, 两张情况内部是怎么处理的呢

麻烦使用obdiag提供一下两种执行计划看看

1 个赞

关注下

你好,如果方便使用obdiag提供一下两者的执行计划