# 性能测试概述

## 测试标准

测试OceanBase集群性能的方法有很多，如`sysbench`、`benchmarksql`。不过如果想对比OceanBase数据库跟传统数据库、其他分布式数据库产品的性能差异，还需要找到一个能适用彼此的测试方案。`sysbench`的功能太弱，且只有0.4 支持ORACLE，不同版本的sql还不完全一样。`benchmarksql`倒是很合适，有一定业务模型，且标准简单容易统一比较。不过如果客户还想测试一点点业务sql，那就只能自己写程序了。如果嫌写程序麻烦，还有个简单的办法就是使用`JMeter`。

## 多副本同步

传统数据库或者基于 MYSQL 或 PG 数据库的分布式数据库，通常都能以单副本实例运行。为了高可用和容灾，也支持一主多备形态部署。不过主备之间同步多是异步同步。异步同步的优点是写性能好，风险是主副本实例故障的时候，主备很可能会不一致。即使使用了 MYSQL 的半同步技术，也不能严格保证主备数据强一致。OceanBase 生产环境默认就是以三副本形态运行，主备副本之前同步的是事务日志，物理同步，同步协议使用 PAXOS 强同步协议。OceanBase 不支持异步同步，不支持牺牲数据安全换取性能。

## 故障应对能力

OceanBase 集群是部署在普通商用服务器上，充分考虑了服务器的故障风险。所以OceanBase 的架构设计始终把数据安全放在首位，平时就是三副本强同步协议，这样任意时刻发生故障，OceanBase都能自动切换，选出新的主副本出来。这个故障切换不需要 DBA 介入，数据库恢复时间 RTO 大概是 30s 左右，数据库恢复后数据绝对不丢 (RPO = 0)。OceanBase 的这个能力平时很难看到，只有发生故障了才能体现。
所以，测试 OceanBase 的性能时需要带着业务压力，并随机注入故障，才是接近实际生产情况。
OceanBase 的在线扩容和缩容、大表在线 DDL，都是有高可用保障。节点故障后恢复时，原有的任务都自动继续进行。
