业务使用 OceanBase 分区表,按时间做了 Range 分区,单分区查询很快,但跨多个分区联查时,响应耗时忽高忽低,比 MySQL 慢不少,想知道底层是什么原因,该怎么优化?
响应耗时忽高忽低,这种情况可能是执行计划不优导致,使用obdiag提取一份sql详细信息
SQL性能问题, 此处env中的trace_id对应gv$ob_sql_audit的trace_id
obdiag gather scene run --scene=observer.perf_sql --env “{db_connect=’-hxx -Pxx -uxx -pxx -Dxx’, trace_id=‘xx’}”
1 个赞
核心原因有两点:
一是 OB 分布式架构下跨分区会触发多分片并行扫描、结果集汇总合并,比单机 MySQL 多了网络交互和数据聚合开销;
二是跨分区查询无法走分区裁剪,优化器会全量扫描多个分区数据,且后台版本合并、副本数据同步会进一步拖慢查询。优化方案:合理设计分区粒度,查询条件尽量命中分区裁剪;
跨分区场景尽量减少返回字段,避免 select *;针对高频跨分区 SQL 建立全局索引;同时避开后台合并高峰期执行业务查询。
1 个赞
查询条件没带时间吧,感觉你这个就不适合用时间分区
1 个赞