首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >使用YCSB进行基准测试时吞吐量与延迟的相关性

使用YCSB进行基准测试时吞吐量与延迟的相关性
EN

Stack Overflow用户
提问于 2018-10-11 20:20:32
回答 1查看 481关注 0票数 0

我正在使用YCSB对许多不同的NoSQL数据库进行基准测试。然而,当使用客户端线程的数量时,我很难解释吞吐量与延迟的结果。

例如,在使用16个客户端线程对运行工作负载a (50/50读取和更新)的cassandra进行基准测试时,将执行以下命令:

代码语言:javascript
复制
bin/ycsb run cassandra-cql -p hosts=xx.xx.xx.xx -p recordcount=525600 -p operationcount=525600 -threads 16 -P workloads/workloada -s > workloada_525600_16_threads_run_res.txt

这将提供以下输出:

代码语言:javascript
复制
[OVERALL], RunTime(ms), 62751
[OVERALL], Throughput(ops/sec), 8375.962136061577
[TOTAL_GCS_PS_Scavenge], Count, 64
[TOTAL_GC_TIME_PS_Scavenge], Time(ms), 289
[TOTAL_GC_TIME_%_PS_Scavenge], Time(%), 0.46055042947522745
[TOTAL_GCS_PS_MarkSweep], Count, 0
[TOTAL_GC_TIME_PS_MarkSweep], Time(ms), 0
[TOTAL_GC_TIME_%_PS_MarkSweep], Time(%), 0.0
[TOTAL_GCs], Count, 64
[TOTAL_GC_TIME], Time(ms), 289
[TOTAL_GC_TIME_%], Time(%), 0.46055042947522745
[READ], Operations, 262650
[READ], AverageLatency(us), 1844.6075042832667
[READ], MinLatency(us), 290
[READ], MaxLatency(us), 116159
[READ], 95thPercentileLatency(us), 3081
[READ], 99thPercentileLatency(us), 7551
[READ], Return=OK, 262650
[CLEANUP], Operations, 16
[CLEANUP], AverageLatency(us), 139458.5
[CLEANUP], MinLatency(us), 1
[CLEANUP], MaxLatency(us), 2232319
[CLEANUP], 95thPercentileLatency(us), 19
[CLEANUP], 99thPercentileLatency(us), 2232319
[UPDATE], Operations, 262950
[UPDATE], AverageLatency(us), 1764.8220193953223
[UPDATE], MinLatency(us), 208
[UPDATE], MaxLatency(us), 95807
[UPDATE], 95thPercentileLatency(us), 2901
[UPDATE], 99thPercentileLatency(us), 7031
[UPDATE], Return=OK, 262950

用32个线程运行相同的操作,我得到:

代码语言:javascript
复制
[OVERALL], RunTime(ms), 51785
[OVERALL], Throughput(ops/sec), 10149.65723665154
[TOTAL_GCS_PS_Scavenge], Count, 124
[TOTAL_GC_TIME_PS_Scavenge], Time(ms), 310
[TOTAL_GC_TIME_%_PS_Scavenge], Time(%), 0.5986289466061601
[TOTAL_GCS_PS_MarkSweep], Count, 0
[TOTAL_GC_TIME_PS_MarkSweep], Time(ms), 0
[TOTAL_GC_TIME_%_PS_MarkSweep], Time(%), 0.0
[TOTAL_GCs], Count, 124
[TOTAL_GC_TIME], Time(ms), 310
[TOTAL_GC_TIME_%], Time(%), 0.5986289466061601
[READ], Operations, 262848
[READ], AverageLatency(us), 2947.844628834916
[READ], MinLatency(us), 363
[READ], MaxLatency(us), 194559
[READ], 95thPercentileLatency(us), 5079
[READ], 99thPercentileLatency(us), 11055
[READ], Return=OK, 262848
[CLEANUP], Operations, 32
[CLEANUP], AverageLatency(us), 69601.5625
[CLEANUP], MinLatency(us), 1
[CLEANUP], MaxLatency(us), 2228223
[CLEANUP], 95thPercentileLatency(us), 3
[CLEANUP], 99thPercentileLatency(us), 2228223
[UPDATE], Operations, 262752
[UPDATE], AverageLatency(us), 2881.930485781269
[UPDATE], MinLatency(us), 316
[UPDATE], MaxLatency(us), 203391
[UPDATE], 95thPercentileLatency(us), 4987
[UPDATE], 99thPercentileLatency(us), 10711
[UPDATE], Return=OK, 262752

总体运行时间较低,因此吞吐量较高,但延迟也较高。

我不太确定如何解释这些结果,以及如何找到要运行的客户端线程的“适当”数量?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-10-14 17:35:46

为了有一个合格的基准测试,你应该首先定义你的系统要达到的SLA要求。假设您的工作负载模式是50/50 WR/RD,您的SLA要求是10K操作/秒吞吐量,99%延迟< 10毫秒。使用YCSB标记生成所需的吞吐量,并使用各种线程计数来查看哪个线程满足您的-target需求。

当使用更多线程时,吞吐量增加(更多的操作/秒),这很有意义,但这是以延迟为代价的。您应该查看相关的数据库指标,尝试找出瓶颈-它可能是:

  • 客户端(需要更强大的客户端,或者更好的并行性,使用更少的线程但更多的clients)
  • Network
  • DB服务器(磁盘/-使用更强大的实例)。

您可以阅读更多关于DB基准测试here该做和不该做的内容

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52759946

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档