大家好,最近在业务中把 OceanBase 的一条核心慢 SQL 从 3 秒优化到 80 毫秒,把实战过程分享给社区,希望能帮到大家。
一、环境信息
- OB 版本:OceanBase 4.2.1 社区版
- 业务场景:多表关联订单查询,单表数据量 500w+
- 问题:SQL 执行慢、接口超时、全表扫描
二、优化步骤
-
慢 SQL 定位 使用
show processlist找到慢 SQL,通过explain analyze分析执行计划,确认未命中索引、数据扫描量大、排序开销大。 -
索引优化 按照等值条件在前,范围条件在后原则,建立联合索引,并做成覆盖索引,避免回表。
-
并行与内存调优 适当调整
ob_parallel_degree并行度,优化work_area_size,避免排序落盘。 -
稳定执行计划 对抖动 SQL 做执行计划绑定,保证查询稳定。
三、避坑总结
- OceanBase 索引要结合分区特性,不要盲目照搬 MySQL 经验
- 避免
select *,只查需要的字段 - 优化后一定要压测,防止影响写入
- 定期清理过期执行计划
优化后接口成功率从 75% 提升到 99.9%,CPU 使用率明显下降。欢迎大家在评论区交流 OB 慢 SQL 优化经验,一起学习进步!