Oceanbase集群和mysql相同查询语句进行查询时,oceanbase比mysql慢很多,如何调优

【 使用环境 】测试环境
【 OB or 其他组件 】OB
【 使用版本 】4.3.5
【问题描述】2-2-2的3 zoneoceanbase集群,412万2千多条数据,使用相同的查询语句查询时,mysql需要1分钟,oceanbase需要1分半钟,请问如何调优能提高oceanbase的查询速度呢?
【复现路径】查询语句:
SELECT cert_type certType,template_id tid,cert_alg alg ,status,COUNT(*) userNum FROM t_user_info num where 1=1 and last_oper_time >=1722960000000 and last_oper_time <1754668800000 GROUP BY cert_type,template_id,cert_alg,STATUS

【附件及日志】拓扑图和资源分布如下:


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

2 个赞

为了提升 4.3.5 版本的 OceanBase 集群查询性能,首先我们需要了解具体的查询性能瓶颈在哪里。您可以使用 obdiag 工具来收集有关 SQL 性能的诊断信息,这将有助于我们识别潜在的性能问题并给出优化建议。

根因分析场景: SQL性能问题
根因分析命令: obdiag rca run --scene=sql_performance --env “{db_connect=’-h127.0.0.1 -P2881 -utest@test -p****** -Dtest’, sql_id=‘xxx’, start_time=‘2023-01-01 00:00:00’, end_time=‘2023-01-01 23:59:59’}”

日志采集场景: SQL性能问题
日志采集命令: obdiag gather scene run --scene=observer.perf_sql --env “{db_connect=’-h127.0.0.1 -P2881 -utest@test -p****** -Dtest’, trace_id=‘Yxx’}”

以上命令中,db_connect 参数用于指定数据库连接信息,请替换 -h127.0.0.1 -P2881 -utest@test -p****** -Dtest 中的相应值为您实际使用的主机地址、端口、用户名、密码和数据库名。sql_id 是执行较慢的SQL语句的ID;start_timeend_time 指定性能问题出现的时间范围;trace_id 为追踪特定SQL执行情况的ID,若不知道确切的 trace_id,可以留空或删除该参数。

在执行上述命令之后,请将生成的日志文件打包发送给我们,以便进一步分析。同时,为了更有效地解决您的问题,还需要您提供以下信息:

  1. 具体的查询语句是什么?
  2. 该查询语句在MySQL中的执行时间和计划是怎样的?
  3. 您是否已经尝试过任何性能优化措施,例如索引优化、查询重写等?
  4. 查询的表结构是怎样的,尤其是表的大小和索引情况?
  5. 系统配置信息,包括硬件配置和OceanBase版本。
  6. 是否有其他同时进行的大查询或事务操作影响了查询性能?

感谢您的配合,期待您的回复。

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

1 个赞

不是有全链路追踪的功能么,看看是哪部分耗时较久

不好意思,刚开始学习oceanbase,还不太了解这些功能,这个应该怎么操作呀?

查询对比性能需要尽可能保证除数据库本身以外其他资源相等;可以这样调整试试:
1、ocp-租户-统计信息管理-收集测试库的统计信息
2、收集统计信息后完成一轮集群合并
3、前俩步完成后,查询一次看看
建议记录当前执行计划和调整后的执行计划进行对比

刚按照您的步骤试了一下,好像没什么效果,貌似是索引加的有问题,查询的时候如果不带cert_alg alg这一项速度就很快,大概1秒多钟,加上之后就变成90秒了

通过gv$ob_sql_audit这个表查一下trace_id在使用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’}”

谢谢各位老师的指点~~现在问题已经改好了,优化了下索引,查询速度优化到2秒了

如果在遇到问题 可以使用obdiag收集一下 sql信息 方便后期排查

好的,谢谢淇铭老师~~