云数据库 MongoDB 版支持审计日志功能。本文通过基准测试,量化分析开启审计日志对实例性能的影响,帮助您评估开启审计日志的性能开销。
测试结论
根据测试结果,开启审计日志对云数据库 MongoDB 版实例的性能影响如下:
纯写场景(纯插入或纯更新):CPU 使用率上涨约 3 个百分点(15%~20%),响应时间和吞吐量无明显变化。
读写混合场景:CPU 使用率无明显变化,但读写性能下降约 15%~20%。具体表现为写操作平均响应时间增加 500~700 μs,读操作平均响应时间增加 150~300 μs,吞吐量下降 15%~20%。
测试环境
配置项 | 压测ECS实例 | MongoDB实例 |
地域及可用区 | 华东1(杭州)可用区J | 华东1(杭州)可用区J |
网络类型 | 专有网络VPC | 专有网络VPC |
实例规格族 | 计算型实例 c8i | 独享型 |
实例规格 | ecs.c8i.4xlarge(16核 32 GB) | mdb.shard.8x.16xlarge.d(64核512GB) |
存储类型 | ESSD PL0云盘(系统盘),无数据盘 | ESSD PL1 云盘 |
带宽 | 100Mbps | 350Mbps |
存储空间 | 40 GiB(系统盘) | 470 GB |
拓扑结构 | - | 标准副本集实例(三节点,一个主节点、一个从节点和一个隐藏节点) |
镜像版本 | CentOS 7.8 64位 | - |
实例内核版本 | - | MongoDB 6.0(内核小版本 7.0.23) |
读写关注级别(Read/Write Concern) | - | Default read/write concern |
压测ECS实例和云数据库MongoDB实例在同一地域及可用区,RTT(Round-Trip Time,往返时延)约为0.104 ms。
测试工具
本文使用开源基准测试工具 YCSB(Yahoo! Cloud Serving Benchmark)0.17.0 版本进行测试。
YCSB 是一款 Java 编写的支持多种数据库的性能基准测试工具。安装和使用方法,请参见YCSB。
测试方案
将 ECS 实例的主私网IP添加到云数据库 MongoDB 实例的白名单中。添加方法,请参见修改白名单。
说明您可以登录ECS 控制台,在实例详情页面的网络信息区域查看 ECS 实例的主私网IP。
远程连接 ECS 实例。连接方法,请参见连接ECS实例。
使用YCSB工具加载测试数据。
./bin/ycsb load mongodb -s -p workload=site.ycsb.workloads.CoreWorkload -p recordcount=10000000 -p mongodb.url="mongodb://root:xxx@dds-bp1be0f4f3bbdxxxx.mongodb.rds.aliyuncs.com:3717,dds-bp1be0f4f3bbdxxxx.mongodb.rds.aliyuncs.com:3717/admin?replicaSet=mgset-xxxx" -threads 300请根据实际情况修改以下参数:
recordcount=10000000:加载至 MongoDB 实例的数据总量。本次测试加载 1000 万条数据。mongodb.url="mongodb://root:xxx@dds-bp1be0f4f3bbdxxxx.mongodb.rds.aliyuncs.com:3717,dds-bp1be0f4f3bbdxxxx.mongodb.rds.aliyuncs.com:3717/admin?replicaSet=mgset-xxxx":MongoDB 实例的连接地址。本文使用 root 账号连接 admin 数据库。说明您可以登录云数据库MongoDB控制台,在数据库连接页面的私网连接区域查看连接地址。
threads=300:客户端的并发线程数。
执行以下命令进行性能基准测试。以下示例为纯更新场景(update 100%)的测试命令:
./bin/ycsb run mongodb -s -p workload=site.ycsb.workloads.CoreWorkload -p recordcount=10000000 -p operationcount=500000000 -p insertproportion=0 -p readproportion=0 -p updateproportion=1 -p requestdistribution=zipfian -p mongodb.url="mongodb://root:xxx@dds-bp1be0f4f3bbdxxxx.mongodb.rds.aliyuncs.com:3717,dds-bp1be0f4f3bbdxxxx.mongodb.rds.aliyuncs.com:3717/admin?replicaSet=mgset-xxxx" -threads 300 -target 100000您需要修改如下参数值:
recordcount=10000000:已加载到 MongoDB 实例的数据总量。需与步骤三中的值一致。operationcount=500000000:执行读写测试的总操作次数。本次测试为 5 亿次。insertproportion=0:插入操作比例。取值范围为 0~1,其中 1 表示 100%。readproportion=0:读操作比例。取值范围为 0~1。updateproportion=1:更新操作比例。取值范围为 0~1。mongodb.url="mongodb://root:xxx@dds-bp1be0f4f3bbdxxxx.mongodb.rds.aliyuncs.com:3717,dds-bp1be0f4f3bbdxxxx.mongodb.rds.aliyuncs.com:3717/admin?replicaSet=mgset-xxxx":MongoDB 实例的连接地址,与上一步获取方式一致。threads=300:客户端的并发线程数。target=100000:目标吞吐量(ops/sec)。本次测试目标为每秒 10 万次操作。
测试结果
环境说明
实例规格 | MongoDB版本 | recordcount | threads |
64核512GB(独享型) | MongoDB 6.0(内核小版本 7.0.23) | 10000000 | 300 |
场景说明
insert:read:update=100:0:0:纯插入场景。为 insert 操作开启审计日志。insert:read:update=0:0:100:纯更新场景。为 update 操作开启审计日志。insert:read:update=50:50:0:50% 插入 + 50% 读。为 insert、query 操作开启审计日志。insert:read:update=0:50:50:50% 读 + 50% 更新。为 query、update 操作开启审计日志。insert:read:update=30:70:0:30% 插入 + 70% 读。为 insert、query 操作开启审计日志。insert:read:update=0:70:30:70% 读 + 30% 更新。为 query、update 操作开启审计日志。
指标说明
CpuUsage:实例 CPU 使用率,反映业务负载。MongoDB_RT:实例平均响应时间,包含 writes_avg_rt(写平均响应时间)和 reads_avg_rt(读平均响应时间)。MongoDB_Opcounters:实例操作吞吐量(ops/sec),统计 query、insert、update 等操作的每秒计数。
测试结果
下表展示各场景下开启审计日志前后的性能变化。
测试场景 | CpuUsage | MongoDB_RT | MongoDB_Opcounters |
纯插入(100:0:0) | 上涨 3 个百分点(+15%) | 无明显变化 | 无明显变化 |
纯更新(0:0:100) | 上涨 3 个百分点(+20%) | 无明显变化 | 无明显变化 |
50% 插入 + 50% 读(50:50:0) | 无明显变化 | writes_avg_rt +700 μs(+20%);reads_avg_rt +300 μs(+250%) | query 降低 5000(-20%); insert 降低 5000(-20%) |
50% 读 + 50% 更新(0:50:50) | 无明显变化 | writes_avg_rt +500 μs(+18%);reads_avg_rt +150 μs(+200%) | query 降低 5000(-15%); update 降低 5000(-15%) |
30% 插入 + 70% 读(30:70:0) | 无明显变化 | writes_avg_rt +600 μs(+20%);reads_avg_rt +300 μs(+270%) | query 降低 12,000(-20%); insert 降低 5000(-20%) |
70% 读 + 30% 更新(0:70:30) | 无明显变化 | writes_avg_rt +500 μs(+20%);reads_avg_rt +150 μs(+150%) | query 降低 10,000(-15%);update 降低 5000(-15%) |
测试结果分析
纯写场景(纯插入或纯更新):开启审计日志后,CPU 使用率上涨约 3 个百分点,但响应时间和吞吐量均无明显变化。审计日志对纯写操作的性能影响较小。
读写混合场景:开启审计日志后,CPU 使用率无明显变化,但读写性能整体下降 15%~20%。其中写操作的平均响应时间增加 500~700 μs,读操作的平均响应时间增加 150~300 μs。
reads_avg_rt 的百分比增长较高(150%~270%),是因为读操作的基线响应时间较低(约 100 μs 级别),绝对增量仅为 150~300 μs。