开启审计日志性能分析

更新时间:
复制为 MD 格式

云数据库 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(64512GB)

存储类型

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

测试方案

  1. 将 ECS 实例的主私网IP添加到云数据库 MongoDB 实例的白名单中。添加方法,请参见修改白名单

    说明

    您可以登录ECS 控制台,在实例详情页面的网络信息区域查看 ECS 实例的主私网IP

  2. 远程连接 ECS 实例。连接方法,请参见连接ECS实例

  3. 使用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:客户端的并发线程数。

  4. 执行以下命令进行性能基准测试。以下示例为纯更新场景(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

64512GB(独享型)

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。