[アーティクル] 08/15/2024
2 人の共同作成者
フィードバック
この記事の内容
データ ワークロードで使用するデータベースの種類には、これまで以上に多くの選択肢があります。 データベースを選択する主な要因の 1 つはデータベースまたはサービスのパフォーマンスですが、パフォーマンスのベンチマーク測定は煩雑で、誤りが発生しやすい場合があります。 Azure データベースのベンチマーク フレームワーク を使用すると、一般的なベスト プラクティスを実装する低摩擦のレシピで、人気のあるオープンソース ベンチマーク ツールを利用できるため、パフォーマンスを測定するプロセスが簡素化されます。 Azure Cosmos DB for NoSQL では、このフレームワークは Java SDK のベスト プラクティス を実装し、オープンソースの YCSB ツールを使用します。 このガイドでは、このベンチマーク フレームワークを使用して読み取りワークロードを実装し、フレームワークについて理解を深めます。
前提条件
Azure Cosmos DB アカウント リソースの作成
まず、既存の NoSQL 用 API アカウントにデータベースとコンテナーを作成します。
Azure portal で既存の NoSQL 用 API アカウントに移動します。
リソース メニューで [Data Explorer] を選びます。
[データ エクスプローラー] ページで、コマンド バーの [新しいコンテナー] オプションを選択します。
[ 新しいコンテナー] ダイアログで、次の設定で新しいコンテナーを作成します。
設定
値
データベース ID
ycsb
データベースのスループットの種類
[手動]
データベースのスループットの量
400
コンテナー ID
usertable
パーティション キー
/id
az login
コマンドを使用して Azure CLI にサインインします (まだ行っていない場合)。
次の値のシェル変数を作成します。
cosmosAccountName
という名前の、既存の Azure Cosmos DB for NoSQL アカウントの名前。
sourceResourceGroupName
という名前の、リソースを含む最初のリソース グループの名前。
targetResourceGroupName
という名前の、2 番目の空のリソース グループの名前。
cosmosEndpoint
という名前の、既存の Azure Cosmos DB for NoSQL アカウントのエンドポイント URI
cosmosPrimaryKey
という名前の、既存の Azure Cosmos DB for NoSQL アカウントの主キー
# Variable for Azure Cosmos DB for NoSQL account name
cosmosAccountName="<cosmos-db-nosql-account-name>"
# Variable for resource group with Azure Cosmos DB and Azure Storage accounts
sourceResourceGroupName="<first-resource-group-name>"
# Variable for empty resource group
targetResourceGroupName="<second-resource-group-name>"
# Variable for API for NoSQL endpoint URI
cosmosEndpoint="<cosmos-db-nosql-endpoint-uri>"
# Variable for API for NoSQL primary key
cosmosPrimaryKey="<cosmos-db-nosql-primary-key>"
# Variable for Azure Storage account name
storageAccountName="<storage-account-name>"
# Variable for storage account connection string
storageConnectionString="<storage-connection-string>"
az cosmosdb sql database create
コマンドを使用して、次の設定で新しいデータベースを作成します。
設定
値
データベース ID
ycsb
データベースのスループットの種類
[手動]
データベースのスループットの量
400
az cosmosdb sql database create \
--resource-group $sourceResourceGroupName \
--account-name $cosmosAccountName \
--name "ycsb" \
--throughput 400
az cosmosdb sql container create
コマンドを使用して、次の設定で新しいコンテナーを作成します。
設定
値
データベース ID
ycsb
コンテナー ID
usertable
パーティション キー
/id
az cosmosdb sql container create \
--resource-group $sourceResourceGroupName \
--account-name $cosmosAccountName \
--database-name "ycsb" \
--name "usertable" \
--partition-key-path "/id"
ベンチマーク フレームワークを Azure にデプロイする
ここで、Azure Resource Manager テンプレート を使用し、既定の読み取りレシピを使用してベンチマーク フレームワークを Azure にデプロイします。
このリンクから利用できる Azure Resource Manager テンプレートを使用して、ベンチマーク フレームワークをデプロイします。
[カスタム デプロイ] ページで、以下のパラメーターを設定します
[確認と作成] 、[作成] の順に選択して、このテンプレートをデプロイします。
デプロイが完了するまで待ちます。
ヒント
このデプロイが完了するまで 5 から 10 分かかる場合があります。
az deployment group create
を使用し、Azure Resource Manager テンプレートを使用してベンチマーク フレームワークをデプロイします。
# Variable for raw template JSON on GitHub
templateUri="https://raw.githubusercontent.com/Azure/azure-db-benchmarking/main/cosmos/sql/tools/java/ycsb/recipes/read/try-it-read/azuredeploy.json"
az deployment group create \
--resource-group $targetResourceGroupName \
--name "benchmarking-framework" \
--template-uri $templateUri \
--parameters \
adminPassword='P@ssw.rd' \
resultsStorageConnectionString=$storageConnectionString \
cosmosURI=$cosmosEndpoint \
cosmosKey=$cosmosPrimaryKey
デプロイが完了するまで待ちます。
ヒント
このデプロイが完了するまで 5 から 10 分かかる場合があります。
ベンチマークの結果を表示する
これで、既存の Azure Storage アカウントを使用してベンチマーク ジョブの状態を確認し、集計された結果を表示できます。 状態はストレージ テーブルに格納され、結果は CSV 形式でストレージ BLOB に集計されます。
Azure portal で既存の Azure Storage アカウントに移動します。
ycsbbenchmarkingmetadata という名前のストレージ テーブルに移動し、パーティション キーが ycsb_sql
のエンティティを見つけます。
テーブル エンティティの JobStatus
フィールドを確認します。 最初は、ジョブの状態は Started
であり、JobStartTime
プロパティにタイムスタンプが含まれますが、JobFinishTime
プロパティには含まれません。
ジョブの状態が Finished
になり、JobFinishTime
プロパティにタイムスタンプが含まれるようになるまで待ちます。
ヒント
ジョブが完了するまで約 20 から 30 分かかる場合があります。
ycsbbenchmarking- * というプレフィックスを持つ同じアカウント内のストレージ コンテナーに移動します。 ツールの出力と診断 BLOB を確認します。
aggregation.csv BLOB を開き、内容を確認します。 これで、すべてのベンチマーク クライアントからの集計結果を含む CSV データセットが作成されたはずです。
Operation,Count,Throughput,Min(microsecond),Max(microsecond),Avg(microsecond),P9S(microsecond),P99(microsecond)
READ,180000,299,706,448255,1079,1159,2867
az storage entity query
を使用して、ycsbbenchmarkingmetadata
という名前のストレージ テーブル内のジョブ レコードに対してクエリを実行します。
az storage entity query \
--account-name $storageAccountName \
--connection-string $storageConnectionString \
--table-name ycsbbenchmarkingmetadata
このクエリの結果を確認します。 結果として、JobStartTime
、JobStatus
、JobFinishTime
プロパティを持つ 1 つのジョブが返されるはずです。 最初は、ジョブの状態は Started
であり、JobStartTime
プロパティにタイムスタンプが含まれますが、JobFinishTime
プロパティには含まれません。
{
"items": [
{
"JobFinishTime": "",
"JobStartTime": "2023-02-02T13:59:42Z",
"JobStatus": "Started",
"NoOfClientsCompleted": "0",
"NoOfClientsStarted": {
"edm_type": "Edm.Int64",
"value": 1
},
"PartitionKey": "ycsb_sql",
...
}
],
...
}
必要に応じて、ジョブの状態が Finished
になり、JobFinishTime
プロパティにタイムスタンプが含まれるようになるまで、az storage entity query
を何回か実行します。
{
"items": [
{
"JobFinishTime": "2023-02-02T14:21:12Z",
"JobStartTime": "2023-02-02T13:59:42Z",
"JobStatus": "Finished",
...
}
],
...
}
ヒント
ジョブが完了するまで約 20 から 30 分かかる場合があります。
az storage container list
と JMESPath クエリ を使用して、プレフィックス ycsbbenchmarking-*
を持つ、いちばん最近に変更されたストレージ コンテナーの名前を見つけます。
az storage container list \
--account-name $storageAccountName \
--connection-string $storageConnectionString \
--query "sort_by([?starts_with(name, 'ycsbbenchmarking-')], &properties.lastModified)[-1].name" \
--output tsv
storageConnectionString
という名前の変数にコンテナー文字列を格納します。
storageContainerName=$( \
az storage container list \
--account-name $storageAccountName \
--connection-string $storageConnectionString \
--query "sort_by([?starts_with(name, 'ycsbbenchmarking-')], &properties.lastModified)[-1].name" \
--output tsv \
)
[az storage blob query
](/cli/azure/storage/blob#az-storage-blob-query) を使用して、前に見つけたコンテナーに格納されているストレージ BLOB にクエリを実行してジョブの結果を取得します。
az storage blob query \
--account-name $storageAccountName \
--connection-string $storageConnectionString \
--container-name $storageContainerName \
--name aggregation.csv \
--query-expression "SELECT * FROM BlobStorage"
このクエリの結果を確認します。 これで、すべてのベンチマーク クライアントからの集計結果を含む CSV データセットが作成されたはずです。
Operation,Count,Throughput,Min(microsecond),Max(microsecond),Avg(microsecond),P9S(microsecond),P99(microsecond)
READ,180000,299,706,448255,1079,1159,2867
レシピ
Azure データベースのベンチマーク フレームワーク には、"1 クリック" エクスペリエンスのための基になるベンチマーク ツールに渡されるワークロード定義をカプセル化したレシピが含まれています。 このワークロード定義は、Azure Cosmos DB チームとベンチマーク ツール チームによって公開されたベスト プラクティスに基づいて設計されました。 このレシピは、一貫した結果を得るためのテストと検証を実行済みです。
GitHub リポジトリ のすべての読み取りと書き込みのレシピについて、次のような待機時間が予想されます。
読み取り待機時間
書き込み待機時間
一般的な問題
このセクションでは、ベンチマーク ツールの実行時に発生する可能性がある一般的なエラーについて説明します。 このツールのエラー ログは、通常、Azure Storage アカウント内のコンテナーから入手できます。
ログをストレージ アカウントから入手できない場合は、通常、ストレージの接続文字列が正しくないか見つからないことが原因で問題が発生しています。 この場合、このエラーは、クライアント仮想マシンの /home/benchmarking フォルダー内の agent.out ファイルに一覧表示されます。
Error while accessing storage account, exiting from this machine in agent.out on the VM
このエラーは、Azure Cosmos DB のエンドポイント URI が正しくないか到達できない場合に、クライアント VM とストレージ アカウントの両方の agent.out ファイルに一覧表示されます。
Caused by: java.net.UnknownHostException: rtcosmosdbsss.documents.azure.com: Name or service not known
このエラーは、Azure Cosmos DB のキーが正しくない場合に、クライアント VM とストレージ アカウントの両方の agent.out ファイルに一覧表示されます。
The input authorization token can't serve the request. The wrong key is being used….
次の手順
ベンチマーク ツールの詳細については、概要ガイド をご覧ください。