tencent cloud

文档反馈

测试方法

最后更新时间:2024-10-10 10:41:06
    本文介绍应用 YCSB 对腾讯云数据库 MongoDB 进行性能测试的完整过程。

    测试目标

    说明:
    MongoDB 数据结构灵活,使用场景复杂多变,很难覆盖到所有场景,最终性能表现建议根据业务实际模型进行测试。
    对不同规格的 MongoDB 实例进行性能测试,包含2核4GB、4核8GB、6核16GB等。测试性能指标主要包含 throughput(ops/sec)每秒操作数、RAL(us) 平均读时延、WAL(us) 平均写时延等。
    每一种实例规格测试场景如下所示:
    50% read + 50% update:读更新比例依次为50%与50%。
    95% read + 5% update:读更新比例依次为95%和5%。
    5% read + 95% update:读更新比例依次为5%和95%。
    100% insert:仅写入数据。
    100% read:仅读取数据。
    100% update:仅更新数据。

    测试步骤

    步骤1:远程连接 CVM 实例,下载 YCSB 工具。

    1. 使用标准登录方式登录 CVM 实例。具体操作,请参见 登录服务器
    2. 在 CVM 上进行 YCSB 下载

    步骤2:加载基础测试数据至 MongoDB 数据库

    使用 nohup 命令,在后台运行 YCSB 工具,使用配置文件 workloada,连接到指定的 MongoDB 集群,以同步模式加载数据到 test 集合中,并将输出记录到 loadlog.txt 文件中。具体参数解释如下所示。
    执行命令分解
    解释说明
    nohup
    Linux 命令通常用于运行需要长时间执行的后台进程,确保这些进程不会因为用户的注销或终端的关闭而中断。
    ./ycsb-0.17.0/bin/ycsb
    YCSB 可执行文件路径。
    load
    YCSB 的子命令,用于加载数据到数据库。
    mongodb
    指定要加载的数据库类型 MongoDB。
    -s
    指定同步模式,即加载操作将在所有操作完成后才返回。
    -P workloads/workloada
    指定要使用的 YCSB 工作负载配置文件,此处为 workloada。
    -p mongodb.url=mongodb://mongouser:password@10.xx.xx.30:27017,10.xx.xx.28:27017,10.xx.xx.5:27017/admin?w=0
    指定 MongoDB 的连接 URL 地址。
    连接字符串包括用户名、密码、服务器地址和端口号。
    w = 0表示写操作不需要确认,即不需要等待写操作的响应。
    -p table=test
    指定在 MongoDB 中使用的集合名称为 test。
    -threads 300
    指定用于执行加载操作的线程数量,该示例为300。每一种实例规格对应测试的执行线程数不同。具体信息,请参见 测试结果
    -p recordcount=10000000
    指定要加载的记录总数。该示例为 1000 万条。每一种实例规格对应测试的数据记录总数不同,具体信息,请参见 测试结果
    >loadlog.txt &
    将命令的输出重定向到 loadlog.txt 文件,并且使用 & 将命令放入后台执行。
    nohup ./ycsb-0.17.0/bin/ycsb load mongodb -s -P workloads/workloada
    -p mongodb.url=mongodb://mongouser:password@10.xx.xx.30:27017,10.xx.xx.28:27017,10.xx.xx.5:27017/admin?w=0 -p table=test -threads 300 -p recordcount=10000000>loadlog.txt &

    步骤3:运行脚本,进行压测。

    50%update+50%read

    执行总共10,000,000次操作,其中50%为读取操作,50%为更新操作,不执行插入操作。在100个线程中并行执行,并将输出记录到 runlog.txt 文件中。其中,关键配置参数如下:
    -p table=test: 指定在MongoDB中使用的集合名称。
    -p recordcount=10000000: 指定数据库中记录的总数。
    -p readproportion=0.5: 指定读取操作所占的比例,此处为50%。
    -p updateproportion=0.5: 指定更新操作所占的比例,此处为50%。
    -p insertproportion=0: 指定插入操作所占的比例,此处为0%,即不执行插入操作。
    -p operationcount=100000: 指定要执行的操作总数。
    -threads 100: 指定用于执行操作的线程数量。
    >runlog.txt &: 将命令的输出重定向到 runlog.txt 文件,并且使用&将命令放入后台执行。
    说明:
    测试不同的实例规格,recordcount、operationcount、threads 均有差异。具体数据,请参见 测试结果
    -p operationcount=100000根据具体执行时间动态调整,需要保证执行时间在二十分钟以上,否则时间过短没有代表性。
    ?w=0中的 w 表示 write concern。MongoDB写操作的确认级别,设置为0,表示写操作不需要等待服务器的确认。
    w:1(应答式写入)要求确认操作已经传播到指定的单个 mongod 实例或副本集主实例,缺省为1。
    w:0(非应答式写入)不返回任何响应,所以无法知道写入是否成功,但对于尝试向已关闭的套接字写入或者网络故障会返回异常信息。
    w:>1 该值用于设定写入节点的数目,包括主节点。
    nohup ./ycsb-0.17.0/bin/ycsb run mongodb -s -P workloads/workloada -p mongodb.url=mongodb://mongouser: password @10.xx.xx.30:27017,10.xx.xx.28:27017,10.xx.xx.5:27017/admin?w=0 -p table=test -p recordcount=10000000 -p readproportion=0.5 -p updateproportion=0.5 -p insertproportion=0 -p operationcount=10000000 -threads 100 >runlog.txt &

    95% update + 5% read

    执行总共10,000,000次操作,其中95%为更新操作,5%为读取操作,不执行插入操作。在100个线程中并行执行,并将输出记录到 runlog.txt 文件中。
    nohup ./ycsb-0.17.0/bin/ycsb run mongodb -s -P workloads/workloada -p mongodb.url=mongodb://mongouser: password @10.xx.xx.30:27017,10.xx.xx.28:27017,10.xx.xx.5:27017/admin?w=0 -p table=test -p recordcount=10000000 -p readproportion=0.05 -p updateproportion=0.95 -p insertproportion=0 -p operationcount=10000000 -threads 100 >runlog.txt &

    5%update + 95%read

    执行总共10,000,000次操作,其中5%为更新操作,95%为读取操作,不执行插入操作。在100个线程中并行执行,并将输出记录到 runlog.txt 文件中。
    nohup ./ycsb-0.17.0/bin/ycsb run mongodb -s -P workloads/workloada -p mongodb.url=mongodb://mongouser: password @10.xx.xx.30:27017,10.xx.xx.28:27017,10.xx.xx.5:27017/admin?w=0 -p table=test -p recordcount=10000000 -p readproportion=0.95 -p updateproportion=0.05 -p insertproportion=0 -p operationcount=10000000 -threads 100 >runlog.txt &

    100%insert

    执行总共10,000,000次操作,100%插入操作,在100个线程中并行执行,并将输出记录到 runlog.txt 文件中。
    nohup ./ycsb-0.17.0/bin/ycsb run mongodb -s -P workloads/workloadb -p mongodb.url=mongodb://mongouser: password @10.xx.xx.30:27017,10.xx.xx.28:27017,10.xx.xx.5:27017/admin?w=0 -p table=test -p recordcount=10000000 -p readproportion=0 -p updateproportion=0 -p insertproportion=1 -p operationcount=10000000 -threads 100 >runlog.txt &

    100% read

    执行总共10,000,000次操作,100%读操作,在100个线程中并行执行,并将输出记录到 runlog.txt 文件中。
    nohup ./ycsb-0.17.0/bin/ycsb run mongodb -s -P workloads/workloadc -p mongodb.url=mongodb://mongouser: password @10.xx.xx.30:27017,10.xx.xx.28:27017,10.xx.xx.5:27017/admin?w=0 -p table=test -p recordcount=10000000 -p readproportion=1 -p updateproportion=0 -p insertproportion=0 -p operationcount=10000000 -threads 100 >runlog.txt &

    100% update

    执行总共10,000,000次操作,100% Update 操作,在100个线程中并行执行,并将输出记录到 runlog.txt 文件中。
    nohup ./ycsb-0.17.0/bin/ycsb run mongodb -s -P workloads/workloadb -p mongodb.url=mongodb://mongouser: password @10.xx.xx.30:27017,10.xx.xx.28:27017,10.xx.xx.5:27017/admin?w=0 -p table=test -p recordcount=10000000 -p readproportion=0 -p updateproportion=1 -p insertproportion=0 -p operationcount=10000000 -threads 100 >runlog.txt &

    步骤4:获取测试数据

    腾讯云 MongoDB 测试了 4.0、4.4版本,云盘版与物理版,不同实例规格的性能数据,具体测试结果,请参见 测试结果
    联系我们

    联系我们,为您的业务提供专属服务。

    技术支持

    如果你想寻求进一步的帮助,通过工单与我们进行联络。我们提供7x24的工单服务。

    7x24 电话支持