Корреляция между пропускной способностью и задержкой при сравнительном тестировании с YCSB - PullRequest
0 голосов
/ 11 октября 2018

Я использую YCSB для тестирования ряда различных баз данных NoSQL.Однако, когда я играю с количеством клиентских потоков, мне сложно интерпретировать результаты по пропускной способности и задержке.

Например, при тестировании cassandra с рабочей нагрузкой a (50/50 операций чтения и обновления) с 16 клиентамиThreads выполняется следующая команда:

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

, которая дает следующий вывод:

[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 потоками, которые я получаю:

[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

Общее время выполнения ниже и, следовательно, пропускная способность выше, но задержки также выше.

Я не совсем уверен, как интерпретировать эти результаты и как найти «подходящее» количество клиентских потоков для запуска?

1 Ответ

0 голосов
/ 14 октября 2018

Чтобы получить квалифицированные тесты, вы должны сначала определить требования SLA, которые вы хотите достичь в своей системе.Скажем, ваша рабочая нагрузка составляет 50/50 WR / RD, а ваши требования SLA - пропускная способность 10 Кбит / с с задержкой 99-го процентиля <10 миллисекунд.Используйте флаг YCSB <code>-target для создания необходимой пропускной способности и используйте различное количество потоков, чтобы увидеть, какой из них соответствует вашим требованиям SLA.

Имеет большой смысл, что когда используется больше потоков, пропускная способность увеличивается (большеопс / сек), но это происходит по цене задержки.Вы должны изучить соответствующие метрики базы данных, чтобы попытаться найти свое узкое место - это может быть:

  • Клиент (нужен более сильный клиент или лучшая параллелизм, использующий меньше потоков, но больше клиентов)

  • Сеть

  • Сервер БД (диск / ОЗУ - используйте более сильный экземпляр).

ВыВы можете узнать больше о том, что можно и что нельзя делать в тестах БД здесь

...