从 MySQL 迁移到 OceanBase 后,特定复合查询的性能下降了,应如何排查和优化?

我们将一个核心业务从 MySQL 5.7 迁移到了 OceanBase 4.x 版本。迁移后,大部分查询运行正常,但其中一个涉及多表关联(JOIN)和复杂 WHERE 子句的查询,执行时间从原来的约 200ms 增加到了 2秒以上。我们已经检查了表结构,确保主键、索引都已同步。

想请教一下,针对 OceanBase 的分布式架构,排查此类问题的一般思路是什么?是否有特定的执行计划(EXPLAIN)查看方式或内部视图(如 GV$OB_PLAN_CACHE_PLAN_STAT )推荐重点关注?可能的优化方向有哪些?

4 个赞

常见的 SQL 调优方式-V4.2.1-DBA 入门教程文档-分布式数据库使用文档

OceanBase 性能调优 - OceanBase 数据库技术专题

1 个赞

坐等答案

1 个赞

:call_me_hand: :call_me_hand: :call_me_hand: :call_me_hand:

先找到那条慢SQL的SQL_IDPLAN_ID 。假设你的SQL是 select * from t1, t2 where ... ,执行后立即查询:

sql

SELECT SQL_ID, PLAN_ID, ELAPSED_TIME, QUEUE_TIME, EXECUTE_TIME FROM oceanbase.GV$OB_SQL_AUDIT WHERE QUERY_SQL LIKE ‘%你的SQL特征%’ ORDER BY REQUEST_TIME DESC LIMIT 1;

拿到PLAN_ID 后,用DBMS_XPLAN 展示详细计划 :

sql

SELECT * FROM TABLE(DBMS_XPLAN.DISPLAY_AUDIT(‘你的SQL_ID’));

重点关注输出中的 Plan TypeLOCAL (本地)、REMOTE (远程)还是 DISTRIBUTED (分布式) 。如果变成了DISTRIBUTED ,大概率是数据被拆到了多个节点,引入了网络开销

1 个赞

你现在如何确定是性能下降了

坐等有经验大佬分享思路

真的是个好东西