このドキュメントでは、Tair (Enterprise Edition) の SSD ベースのインスタンスのパフォーマンスベンチマークのテスト環境、ツール、方法、および結果について説明します。
テスト環境
項目 | 説明 |
リージョンとゾーン | 杭州ゾーン J |
インスタンスアーキテクチャ | 標準マスター/レプリカアーキテクチャ。 詳細については、「標準アーキテクチャ」をご参照ください。 |
ストレステストホスト |
|
テスト対象のインスタンスタイプ |
|
このベンチマークは、メモリ使用率の両極端を表す 2 つのシナリオを対象としています:
メモリがデータ量より大きい場合:ほとんどのデータがメモリに収まります。 メモリとデータの比率は約 7:1 です。 これは、メモリ中心のアクセスパターンを表します。
データ量がメモリよりも大きい場合:データの一部のみがメモリにキャッシュされ、ほとんどの読み取り/書き込みリクエストにはディスク I/O が必要です。 メモリとデータの比率は約 1:4 です。 これは、SSD 中心のアクセスパターンを表します。
テストツール
このベンチマークでは、オープンソースの Java ベースのデータベースベンチマークフレームワークである YCSB を使用します。
YCSB のソースコードは、LONG 型の recordcount パラメーターをサポートし、Redis の文字列コマンドをテストするように変更されています。 変更されたソースコードについては、「YCSB ソースコード」をご参照ください。
テストスクリプト
次のスクリプトは、データ量がメモリよりも大きいシナリオでのパフォーマンステストを実行します:
#!/bin/bash
ip=192.168.0.23
port=3100
timeout=30000
command_group=string
recordcount=640000000
run_operationcount=640000000
fieldcount=1
fieldlength=100
threads=64
load_sleep_time=600
run_sleep_time=60
echo "##################################### $command_group ############################################"
# ロード
./bin/ycsb load redis -s -P workloads/workloada \
-p "redis.host=${ip}" -p "redis.port=${port}" \
-p "recordcount=${recordcount}" -p "operationcount=${recordcount}" \
-p "redis.timeout=${timeout}" -p "redis.command_group=${command_group}" \
-p "fieldcount=${fieldcount}" -p "fieldlength=${fieldlength}" \
-threads ${threads}
sleep ${load_sleep_time}
# 均一読み取り
./bin/ycsb run redis -s -P workloads/workloadc \
-p "redis.host=${ip}" -p "redis.port=${port}" \
-p "recordcount=${recordcount}" -p "operationcount=${run_operationcount}" \
-p "redis.timeout=${timeout}" -p "redis.command_group=${command_group}" \
-p "fieldcount=${fieldcount}" -p "fieldlength=${fieldlength}" \
-p "requestdistribution=uniform" -threads ${threads}
sleep ${run_sleep_time}
# Zipf 分布読み取り
./bin/ycsb run redis -s -P workloads/workloadc \
-p "redis.host=${ip}" -p "redis.port=${port}" \
-p "recordcount=${recordcount}" -p "operationcount=${run_operationcount}" \
-p "redis.timeout=${timeout}" -p "redis.command_group=${command_group}" \
-p "fieldcount=${fieldcount}" -p "fieldlength=${fieldlength}" \
-p "requestdistribution=zipfian" -threads ${threads}
sleep ${run_sleep_time}
# 均一 50% 読み取り-50% 更新
./bin/ycsb run redis -s -P workloads/workloada \
-p "redis.host=${ip}" -p "redis.port=${port}" \
-p "recordcount=${recordcount}" -p "operationcount=${run_operationcount}" \
-p "redis.timeout=${timeout}" -p "redis.command_group=${command_group}" \
-p "fieldcount=${fieldcount}" -p "fieldlength=${fieldlength}" \
-p "requestdistribution=uniform" -threads ${threads}パラメーター
パラメーター | 説明 |
| Tair インスタンスの IP アドレス |
| Tair インスタンスのサービスポート |
| コマンドタイムアウト。単位:ms |
| テストするデータ型。 |
| データロードフェーズでロードされるレコード数 |
| 実行フェーズでの操作数。両方のシナリオで、これを |
| レコードあたりのフィールド数。 |
| 各フィールドの長さ (バイト単位)。 |
| YCSB クライアントのスレッド数。インスタンスタイプによって異なります。 |
テストメトリクス
メトリクス | 説明 |
QPS | 1 秒あたりに処理される読み取りおよび書き込み操作の数 |
平均レイテンシー | 読み取りまたは書き込み操作の平均レイテンシー。単位:µs |
99 パーセンタイルレイテンシー | 最も高速な 99% の操作における最大レイテンシー。単位:µs。たとえば、値が 500 µs の場合、99% の操作が 500 µs 以内に完了することを意味します。 |
テスト結果
メモリがデータ量より大きい場合
メモリとデータの比率は約 7:1 です。ほとんどのリクエストはメモリから処理されます。
インスタンスタイプ | YCSB 設定 | ワークロード | QPS | 平均レイテンシー (µs) | 99 パーセンタイルレイテンシー (µs) |
| recordcount=20,000,000 run_operationcount=20,000,000 threads=64 fieldlength=100 | ロード | 41,960 | 1,522 | 5,523 |
均一読み取り | 110,867 | 574 | 2,515 | ||
Zipf 分布読み取り | 116,309 | 547 | 2,429 | ||
均一 50% 読み取り-50% 更新 | 53,116 | 読み取り:1,094 | 読み取り:4,025 | ||
更新:1,310 | 更新:4,655 | ||||
| recordcount=40,000,000 run_operationcount=40,000,000 threads=128 fieldlength=100 | ロード | 64,378 | 1,985 | 6,091 |
均一読み取り | 205,584 | 620 | 2,279 | ||
Zipf 分布読み取り | 211,290 | 603 | 2,217 | ||
均一 50% 読み取り-50% 更新 | 80,796 | 読み取り:1,406 | 読み取り:4,631 | ||
更新:1,756 | 更新:5,495 | ||||
| recordcount=60,000,000 run_operationcount=60,000,000 threads=192 fieldlength=100 | ロード | 110,169 | 1,737 | 11,279 |
均一読み取り | 233,028 | 820 | 4,675 | ||
Zipf 分布読み取り | 235,489 | 811 | 4,655 | ||
均一 50% 読み取り-50% 更新 | 122,866 | 読み取り:1,480 | 読み取り:10,311 | ||
更新:1,635 | 更新:10,735 | ||||
| recordcount=120,000,000 run_operationcount=120,000,000 threads=384 fieldlength=100 | ロード | 180,502 | 2,122 | 10,727 |
均一読み取り | 429,252 | 891 | 3,293 | ||
Zipf 分布読み取り | 438,533 | 872 | 3,365 | ||
均一 50% 読み取り-50% 更新 | 231,044 | 読み取り:1,541 | 読み取り:8,663 | ||
更新:1,772 | 更新:9,151 |

データ量がメモリより大きい場合
メモリとデータの比率は約 1:4 です。ほとんどのリクエストにはディスク I/O が必要になるため、レイテンシーは上記のメモリ中心のシナリオよりも高くなります。
インスタンスタイプ | YCSB 設定 | ワークロード | QPS | 平均レイテンシー (µs) | 99 パーセンタイルレイテンシー (µs) |
| recordcount=640,000,000 run_operationcount=640,000,000 threads=64 fieldlength=100 | ロード | 32,596 | 1,961 | 8,135 |
均一読み取り | 50,227 | 1,272 | 3,753 | ||
Zipf 分布読み取り | 71,804 | 889 | 2,947 | ||
均一 50% 読み取り-50% 更新 | 27,063 | 読み取り:2,306 | 読み取り:8,199 | ||
更新:2,416 | 更新:8,535 | ||||
| recordcount=1,280,000,000 run_operationcount=1,280,000,000 threads=128 fieldlength=100 | ロード | 50,608 | 2,526 | 9,071 |
均一読み取り | 78,931 | 1,619 | 4,371 | ||
Zipf 分布読み取り | 113,338 | 1,127 | 3,347 | ||
均一 50% 読み取り-50% 更新 | 47,564 | 読み取り:2,598 | 読み取り:8,471 | ||
更新:2,778 | 更新:8,959 | ||||
| recordcount=1,920,000,000 run_operationcount=1,920,000,000 threads=192 fieldlength=100 | ロード | 88,483 | 2,167 | 16,383 |
均一読み取り | 119,177 | 1,609 | 8,775 | ||
Zipf 分布読み取り | 156,079 | 1,228 | 7,663 | ||
均一 50% 読み取り-50% 更新 | 70,402 | 読み取り:2,670 | 読み取り:19,295 | ||
更新:2,777 | 更新:19,535 | ||||
| recordcount=3,840,000,000 run_operationcount=3,840,000,000 threads=384 fieldlength=100 | ロード | 147,757 | 2,596 | 16,559 |
均一読み取り | 217,186 | 1,766 | 7,087 | ||
Zipf 分布読み取り | 282,698 | 1,356 | 6,131 | ||
均一 50% 読み取り-50% 更新 | 135,495 | 読み取り:2,766 | 読み取り:18,591 | ||
更新:2,895 | 更新:18,815 |
