
# 性能测试方法
本章基于GeminiDB Mongo副本集4.0版本，进行性能测试，具体包括测试环境，测试步骤，以及测试结果。
#### 测试环境
- 区域：华北-北京四
- 可用区：可用区一
- 弹性云服务器（Elastic Cloud Server，简称ECS）：规格选择通用计算型s3.2xlarge.2，8U16GB，操作系统镜像使用CentOS 7.5 64位版本。
- 被测试副本集实例的规格：覆盖副本集实例支持的全部规格类型，详见[表1]。
   表1副本集规格 
  | 副本集编号  | 数据库版本 | 实例规格     |
  |:---|:---|:---|
  | 被测副本集1 | 4.0   | 4U16GB   |
  | 被测副本集2 | 4.0   | 8U32GB   |
  | 被测副本集3 | 4.0   | 16U64GB  |
  | 被测副本集4 | 4.0   | 32U128GB |
     
  
 
#### 测试工具
本次测试采用开源社区的YCSB 0.12.0版本的测试工具。
YCSB是一款广泛使用的数据库性能测试工具，具体使用方法请参见[YCSB](https://github.com/brianfrankcooper/YCSB/tree/master/mongodb)。
#### 测试指标
OPS：Operation Per Second，数据库每秒执行的操作数。
#### 测试步骤
1. 配置workload文件。 按照[表2]所示的业务模型，配置workload中的"readproportion"、"insertproportion"、"updateproportion"的值。
   按照[表3]所示的预置数据量，配置workload中的"recordcount"的值。
   
2. 以业务模型workload_s1为例，执行以下命令，准备数据。 **./bin/ycsb load mongodb -s -P workloads/workload_s1** **-p mongodb.url=mongodb://${userName}:${password}@${mongodIP}:${port},${mongodIP}:${port},${mongodIP}:${port}/ycsb?authSource=admin\&replicaSet=replica\&readPreference=secondary -threads ${threadNum} 1\>workload_s1_load.result 2\> workload_s1_load.log**
   
3. 以业务模型workload_s1为例，执行以下命令，测试性能。 **./bin/ycsb run mongodb -s -P workloads/workload_s1** **-p mongodb.url=mongodb://${userName}:${password}@${mongodIP}:${port},${mongodIP}:${port},${mongodIP}:${port}/ycsb?authSource=admin\&replicaSet=replica\&readPreference=secondary -threads ${threadNum} -p maxexecutiontime=1800 1\>workload_s1_run.result 2\> workload_s1_run.log**
   ![](https://support.huaweicloud.com/mongoug-nosql/public_sys-resources/note_3.0-zh-cn.png)
   - ${mongodIP}为GeminiDB Mongo副本集实例下主备节点的内网IP。
   
   - ${password}为GeminiDB Mongo副本集实例的管理员密码。
   
   - ${threadNum}为运行测试的并发线程数，本次测试的并发数为128。
     
 
#### 测试模型
- workload模型
   表2workload模型 
  | workload模型编号 | workload模型                       |
  |:---|:---|
  | S1           | 100% insert                      |
  | S2           | 90% update ,10% read             |
  | S3           | 65% read ,25% insert, 10% update |
  | S4           | 90% read ,5% insert, 5% update   |
  | S5           | 50% update, 50% read             |
  | S6           | 100% read                        |
     
  

- 测试并发数 ：128

- 文档模型 使用YCSB默认配置，每个文档大小1KB，默认"_id"索引。
  
- 预置数据量 本次性能测试中，针对每种规格的副本集，测试了2种预置数据量下的性能。
  不同规格副本集的预置数据量不同，具体如下表所示。
   表3预置数据量 
  | 副本集编号  | 实例规格     | 预置小数据量                                                                                  | 预置大数据量                                                                                    |
  |:---|:---|:---|:---|
  | 被测副本集1 | 4U16GB   | 存储容量：10GB RecordCount：10000000   | 存储容量：100GB RecordCount：100000000 |
  | 被测副本集2 | 8U32GB   | 存储容量：10GB RecordCount：10000000   | 存储容量：100GB RecordCount：100000000   |
  | 被测副本集3 | 16U64GB  | 存储容量：10GB RecordCount：10000000  | 存储容量：100GB RecordCount：100000000  |
  | 被测副本集4 | 32U128GB | 存储容量：10GB RecordCount：10000000 | 存储容量：100GB RecordCount：100000000  |
     
  

- 数据一致性模型 弱一致性：Write Concern为{w : 1, j : false}，数据写入单个节点磁盘，将返回结果。后台异步持久化下盘，为默认的Write Concern设置。
  
 
