ApsaraDB for MongoDB は監査ログをサポートしています。ベンチマークテストは、この機能を有効にした場合のパフォーマンスオーバーヘッドを定量化し、インスタンスで監査ログを有効にするかどうかを評価するのに役立ちます。
テストの結論
監査ログを有効にすると、ApsaraDB for MongoDB インスタンスのパフォーマンスに次のような影響があります:
-
書き込み専用ワークロード (純粋な挿入または更新操作) :CPU 使用率は約 3 パーセンテージポイント増加し (15%~20% の相対的増加) 、応答時間やスループットに大きな変化はありません。
-
読み書き混合ワークロード:CPU 使用率に大きな変化はありませんが、全体的な読み書きパフォーマンスは約 15%~20% 低下します。具体的には、平均書き込み応答時間は 500~700 μs、平均クエリ応答時間は 150~300 μs 増加し、スループットは 15%~20% 低下します。
テスト環境
|
パラメーター |
ストレステスト Elastic Compute Service (ECS) インスタンス |
MongoDB インスタンス |
|
リージョンとゾーン |
中国 (杭州) ゾーン J |
中国 (杭州) ゾーン J |
|
ネットワークタイプ |
VPC |
VPC |
|
インスタンスタイプファミリー |
コンピューティング最適化 c8i |
専用 |
|
インスタンスタイプ |
ecs.c8i.4xlarge (16 vCPU、32 GB) |
mdb.shard.8x.16xlarge.d (64 vCPU、512 GB) |
|
ストレージタイプ |
ESSD PL0 クラウドディスク (システムディスク) 、データディスクなし |
ESSD PL1 クラウドディスク |
|
帯域幅 |
100 Mbps |
350 Mbps |
|
ストレージ容量 |
40 GiB (システムディスク) |
470 GB |
|
トポロジー |
- |
標準レプリカセットインスタンス (3 ノード:プライマリノード x1、セカンダリノード x1、非表示ノード x1) |
|
イメージバージョン |
CentOS 7.8 64 ビット |
- |
|
インスタンスカーネルバージョン |
- |
MongoDB 6.0 (マイナーカーネルバージョン 7.0.23) |
|
Read/Write Concern |
- |
デフォルトの Read/Write Concern |
ストレステスト用の ECS インスタンスと ApsaraDB for MongoDB インスタンスは、同じリージョンおよびゾーンにあります。両インスタンス間のラウンドトリップタイム (RTT) は約 0.104 ms です。
テストツール
ベンチマークテストでは、オープンソースの YCSB (Yahoo! Cloud Serving Benchmark) 0.17.0 ツールを使用します。
YCSB は、複数のデータベースをサポートする Java ベースのベンチマークツールです。インストール方法や使用方法の詳細については、「YCSB」をご参照ください。
テスト手順
-
ECS インスタンスの [プライマリプライベート IP アドレス] を ApsaraDB for MongoDB インスタンスの IP ホワイトリストに追加します。手順の詳細については、「IP ホワイトリストの変更」をご参照ください。
説明ECS コンソール にログインし、インスタンスの詳細 ページの ネットワーク情報 セクションで、ECS インスタンスの [プライマリプライベート IP アドレス] を確認できます。
-
ECS インスタンスにリモートで接続します。手順の詳細については、「ECS インスタンスへの接続」をご参照ください。
-
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 インスタンスにロードするレコードの総数です。このテストでは 1,000 万件のレコードをロードします。 -
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 データベースに接続します。説明接続文字列は、ApsaraDB for MongoDB コンソール の イントラネット接続 ページの データベース接続 セクションで確認できます。
-
threads=300:クライアントの同時実行スレッド数です。
-
-
次のコマンドを実行して、ベンチマークテストを実施します。次の例は、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 インスタンスにロードされたレコードの総数です。この値は、手順 3 の値と同じにする必要があります。 -
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) 単位の目標スループットです。このテストの目標は 100,000 ops/sec です。
-
テスト結果
環境
|
インスタンスタイプ |
MongoDB バージョン |
recordcount |
threads |
|
64 vCPU、512 GB (専用) |
MongoDB 6.0 (マイナーカーネルバージョン 7.0.23) |
10000000 |
300 |
テストシナリオ
-
insert:read:update=100:0:0:純粋な挿入ワークロードです。挿入操作に対して監査ログが有効になっています。 -
insert:read:update=0:0:100:純粋な更新ワークロードです。更新操作に対して監査ログが有効になっています。 -
insert:read:update=50:50:0:50% は挿入、50% はクエリです。挿入およびクエリ操作に対して監査ログが有効になっています。 -
insert:read:update=0:50:50:50% はクエリ、50% は更新です。クエリおよび更新操作に対して監査ログが有効になっています。 -
insert:read:update=30:70:0:30% は挿入、70% はクエリです。挿入およびクエリ操作に対して監査ログが有効になっています。 -
insert:read:update=0:70:30:70% はクエリ、30% は更新です。クエリおよび更新操作に対して監査ログが有効になっています。
メトリクス
-
CpuUsage:インスタンスの CPU 使用率。 -
MongoDB_RT:インスタンスの平均応答時間。writes_avg_rt(平均書き込み応答時間) とreads_avg_rt(平均クエリ応答時間) を含みます。 -
MongoDB_Opcounters:1 秒あたりのクエリ、挿入、および更新操作の数。
テスト結果
次の表は、各シナリオで監査ログを有効にした後のパフォーマンスの変化をまとめたものです。
|
テストシナリオ |
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: -5,000 (-20%) insert: -5,000 (-20%) |
|
50% クエリ + 50% 更新 (0:50:50) |
大きな変化なし |
writes_avg_rt: +500 μs (+18%) 、reads_avg_rt: +150 μs (+200%) |
query: -5,000 (-15%) update: -5,000 (-15%) |
|
30% 挿入 + 70% クエリ (30:70:0) |
大きな変化なし |
writes_avg_rt: +600 μs (+20%) 、reads_avg_rt: +300 μs (+270%) |
query: -12,000 (-20%) insert: -5,000 (-20%) |
|
70% クエリ + 30% 更新 (0:70:30) |
大きな変化なし |
writes_avg_rt: +500 μs (+20%) 、reads_avg_rt: +150 μs (+150%) |
query: -10,000 (-15%) 、update: -5,000 (-15%) |
分析
-
書き込み専用ワークロード:CPU 使用率はわずかに増加しますが、応答時間とスループットは安定しています。書き込み専用のシナリオで監査ログを有効にしても、オーバーヘッドは最小限です。
-
読み書き混合ワークロード:CPU 使用率は変わりませんが、全体のスループットは 15%~20% 低下し、クエリと書き込みの両方の応答時間が著しく増加します。
reads_avg_rt のパーセンテージ増加率 (150%~270%) が高く見えるのは、ベースラインが低い (約 100 μs) ためです。絶対的な増加量は 150~300 μs にすぎません。