生产接入后,通过obProxy执行sql,经常被阻塞-转悬赏贴

【 使用环境 】生产环境
【 OB or 其他组件 】oceanbase、obproxy
【 使用版本 】oceanbase: 4.2.2.0-CE; obproxy: 4.2.1.0-11
【问题描述】
oceanbase集群为3-3-3架构。obProxy单独部署的。
使用生产的查询sql进行压测。
发现集群中只有其中一台cpu是上75%的。其他机器性能都发挥不出来。
而且执行sql的qps上不去。

手动执行sql偶尔会被阻塞几十秒。如下图
简单的select * from prod_s_info limit 10. 正常是0.5s左右就出结果的。

租户关于连接的参数设置如下

obproxy关于连接的参数设置如下

首次diag巡检结果
巡检结果.txt (81.0 KB)

1、调整后,重新压测。 然后压测期间巡检结果如下
obdiag_check_report_observer_2024-08-14-13-25-36.log (53.4 KB)

2、【sql_error_4013】增大了work_percent. 已经没有这个报错了

3、压测场景:从rds上现在了5分钟全量sql。然后开启了3000个线程循环执行这些sql。

4、上午分析了下慢sql。发现主要是有关联查询,有索引却不使用索引。重新收集了统计信息后,才走索引。然后这个sql走索引后,zone3的最高cpu达到75%的降下来了。
然后发现其他的慢sql了。如下图。现在开始zone1的cpu飙升到95%。


然后看了下消耗cpu最大的一个sql。执行计划如下

完整explain.txt (4.9 KB)
其中表prod_sync_s_lazada是个分区表
表prod_s_info是个复制表。
然后发现使用主键关联prod_s_info表,也不使用主键索引。直接扫全表了
obdiag查询到的执行计划如下
obdiag_gather_pack_20240814135454.zip (218.2 KB)

比较大的问题就是,只要有1台机器的cpu爆表了。 leader在其他主机的查询也都慢下来了
整体的性能都下降了

OceanBase 社区已接收您的帖子,正在跟进中。

1、分析语句的trace

–从结果来看没有时间消耗很高的

2、压测集中在一台obsrver上,压测程序和observer分开再压测。

–压测分开以后,只有一台cpu很高的消耗

3、查看所有leader的分布

–从leader上看分区基本上均衡

4、查看压测其中的两个表的lader

–其中一个是复制表,leader集中在一台observer上,不是分区表均衡分布的

5、用户使用的磁盘性能

6、压测cpu性能和磁盘io

分析总结:

1、表集中分布,没有做分区均衡分布,压测的时候造成了单点访问。

2、数据迁移以后,建议先做一次合并和手动统计信息收集。

2、看了压测下cpu、io监控图,用户可以用top -H,vmstat,iostat等实时检测一下物理资源,从压测的结果看CPU和磁盘IO性能一般,建议用户升级。

1 个赞