首批通过分布式安全可靠测评,为关键业务系统打造
性能分析
更新时间:2026-04-14 17:41:09
基础理论
性能调优
性能调优旨在充分发挥软件和硬件的能力,在真实环境中实现系统的最佳性能,提高软硬件的性价比,降低客户的成本。如下所示,通过 perf stat 命令可采集一段时间硬件性能指标数据。
Performance counter stats for process id '3260':
182250.331423 task-clock (msec) # 18.221 CPUs utilized
3,259,379 context-switches # 0.018 M/sec
1,628,966 cpu-migrations # 0.009 M/sec
51 page-faults # 0.000 K/sec
442,995,845,816 cycles # 2.431 GHz
226,812,458,841 instructions # 0.51 insn per cycle
45,556,284,037 branches # 249.965 M/sec
662,510,643 branch-misses # 1.45% of all branches
10.002402740 seconds time elapsed
性能调优步骤
性能调优主要步骤如下所示:
确定优化目标
吞吐量:吞吐量主要关注 CPU 信息和组件瓶颈,目前 ODP 和 OceanBase 数据库都可以将 CPU 跑满
延迟:需要关注访问链路上组件数量和每一段耗时,网络延迟也是重要因素
经验:从全局考虑,越靠近业务侧优化效果可能更明显
压力测试及信息采集:除了采集目标数据外,还需要采集每个组件的 CPU 消耗、网络延迟等数据
分析压力确定性能瓶颈:通过上面采集数据,先确定导致瓶颈点的组件,再继续细致分析
实施优化:目前优化主要是调整参数、调整部署等,特殊情况需要修改代码发版本解决
确认优化效果:主要关注延迟和吞吐量是否满足客户要求或测试成绩
ODP 性能
相关数据总结
性能相关数据总结如下:
qps = 并发数 * (1000ms / rt)
rt = 1000ms / (qps / 并发数)
同机房网络延迟基本在 100us 以内
OceanBase 数据库转发的效率不到 ODP 转发效率的 50%
ODP 性能数据总结:
整机全部独占性能在 2w~3.5w 之间,受 CPU 型号等影响,如果压力小,不走 HT 性能会更高
和 OceanBase 数据库混合部署下存在抢占,对 ODP 做负载均衡性能会更好
相较于其他部署方式,部署在客户端是性能最好的方式
支持 ARM 平台,但 ARM 平台性能没有 x86 系统好
问题处理
ODP 的主要问题是 QPS 和 RT:
QPS:一般可以通过扩容解决,若无法扩容则考虑提升单机性能。若 CPU 足够但是 QPS 上不去则需要根据具体问题分析
RT:通过查看 Slow Query 日志可以看 ODP 耗时,ODP 本身耗时在 us 级别,整体架构对 RT 影响更大
在处理问题时,一定要区分实现的目标是什么,比如 ODP 成为瓶颈后(CPU 满了),导致 OMS 迁移数据慢,扩充 ODP 实例个数可以更快解决问题。
线程模型
通过 top 的 -H 参数可以看线程情况,ODP 的工作线程是 obproxy 和线程名以 ET NET 开头的线程。ODP 做到了线程之间基本无共享,所以每个线程可以独立工作,对于每个请求,均衡分发到每个工作线程中。

参数调整
性能调优涉及到的主要参数如下:
alter proxyconfig set enable_compression_protocol=false; --关闭压缩,降低cpu%
alter proxyconfig set proxy_mem_limited='16G'; --防止oom,可根据实际环境动态调整
alter proxyconfig set enable_prometheus=false;
alter proxyconfig set enable_metadb_used=false;
alter proxyconfig set enable_standby=false;
alter proxyconfig set enable_strict_stat_time=false;
alter proxyconfig set use_local_dbconfig=true; --3.x系列才有
alter proxyconfig set work_thread_num= xxx; --xxx要小于等于实际的核数
路由准确性
因为 OceanBase 数据库转发效率没有 ODP 高,所以核心场景 ODP 的路由准确性非常重要,最好做到都为 local 计划;非核心场景可以不这么严格要求。目前 ODP 支持了普通表、分区表、LDC、Primary Zone 等情况的路由,详细信息请参考 数据路由 一章。
进程性能分析
线程模型数据
恒定 10W qps 数据下 CPU 消耗如下表所示:
| 线程数 | qps | CPU | IPC | 上下文切换 |
|---|---|---|---|---|
| 4 | 100021.12 | 3.979 | 0.49 | 19746 context-switches # 0.165 K/sec 4043 cpu-migrations # 0.034 K/sec |
| 8 | 99985.25 | 5.816 | 0.36 | 1294736 context-switches # 0.007 M/sec (100.00%) 19267 cpu-migrations # 0.110 K/sec (100.00%) |
| 12 | 99943.38 | 6.763 | 0.33 | 2239606 context-switches # 0.011 M/sec (100.00%) 80049 cpu-migrations # 0.395 K/sec (100.00%) |
| 16 | 99912.43 | 7.345 | 0.31 | 2885634 context-switches # 0.013 M/sec (100.00%) 172082 cpu-migrations # 0.781 K/sec (100.00%) |
| 20 | 99959.15 | 8.102 | 0.33 | 3256951 context-switches # 0.013 M/sec (100.00%) 296914 cpu-migrations # 0.001 M/sec (99.99%) |
| 24 | 100032.52 | 8.156 | 0.29 | 3673410 context-switches # 0.015 M/sec (100.00%) 471850 cpu-migrations # 0.002 M/sec (100.00%) |
工具查看
工具查看的主要方法如下:
top 命令
通过 top 命令实时查看 ODP 的 CPU 使用,如果 CPU 使用超过 OceanBase 数据库,其性能可能不正常,需进一步分析
通过 top -H 查看线程的 CPU 消耗,ODP 的线程消耗很平均
perf 命令
通过 perf top 查看热点函数,目前 ODP 无函数占用超过 5%
通过 perf stat 查看硬件指标,在分析不同 CPU 时会有帮助
日志打印
日志对性能损耗很大,可查看 ODP 日志生成速度,如果每 1~2s 就生成一份日志,对性能损害很大