本文內容
現在,與資料工作負載搭配使用的資料庫類型有更多選擇。 挑選資料庫的主要因素之一是資料庫或服務的效能,但效能評定效能可能會很麻煩且容易出錯。 Azure 資料庫的效能評定架構 可簡化使用熱門開放原始碼效能評定工具來測量效能的程式,以及實作低摩擦配方的常見最佳做法。 在 Azure Cosmos DB for NoSQL 中,架構會實作 JAVA SDK 的最佳做法 ,並使用開放原始碼 YCSB 工具。 在本指南中,您會使用此效能評定架構來實作讀取工作負載,以使您自己熟悉架構。
必要條件
建立 Azure Cosmos DB 帳戶資源
首先,您在現有的 API for NoSQL 帳戶中建立資料庫和容器。
在 Azure 入口網站 中瀏覽至您現有的 API for NoSQL 帳戶。
在 [資源] 功能表中,選取 [資料總管] 。
在 [資料總管] 頁面上,選取命令列中的 [新增容器] 選項。
在 [新增容器] 對話方塊中,使用下列設定建立新的容器:
設定
值
資料庫識別碼
ycsb
資料庫輸送量類型
手動
資料庫輸送量數量
400
容器識別碼
usertable
分割區索引鍵
/id
如果您尚未登入,請使用 az login
命令登入 Azure CLI。
建立下列值的殼層變數:
名稱為 cosmosAccountName
的現有 Azure Cosmos DB for NoSQL 帳戶名稱。
名稱為 sourceResourceGroupName
的第一個資源群組名稱。
名稱為 targetResourceGroupName
的第二個空白資源群組名稱。
現有 Azure Cosmos DB for NoSQL 帳戶端點 URI 名稱為 cosmosEndpoint
現有 Azure Cosmos DB for NoSQL 帳戶主索引鍵名稱為 cosmosPrimaryKey
# 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
命令,使用下列設定建立新的資料庫:
設定
值
資料庫識別碼
ycsb
資料庫輸送量類型
手動
資料庫輸送量數量
400
az cosmosdb sql database create \
--resource-group $sourceResourceGroupName \
--account-name $cosmosAccountName \
--name "ycsb" \
--throughput 400
使用 az cosmosdb sql container create
命令,使用下列設定建立新的容器:
設定
值
資料庫識別碼
ycsb
容器識別碼
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 範本來部署效能評定架構。
在自訂部署頁面上,下列參數
選取檢閱 + 建立 ,然後選取建立 以部署範本。
等待部署完成。
使用 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
等待部署完成。
檢視基準的結果
現在,您可以使用現有的 Azure 儲存體帳戶來檢查基準作業的狀態,並檢視匯總的結果。 狀態會使用儲存體資料表來儲存,而結果會使用 CSV 格式匯總到儲存體 Blob。
在 Azure 入口網站 中瀏覽至您現有的 Azure 儲存體帳戶。
瀏覽至名為 ycsbbenchmarkingmetadata 的儲存體資料表 ,並找出具有分割區索引鍵 ycsb_sql
的實體。
觀察資料表實體 JobStatus
欄位。 一開始,作業的狀態為 Started
,而且它會在 JobStartTime
屬性中包含時間戳記,但不包含 JobFinishTime
屬性。
等候作業的狀態為 Finished
,並在 JobFinishTime
屬性中包含時間戳記。
導覽至相同帳戶中的儲存體容器,其前置詞為 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
屬性的單一作業。 一開始,作業的狀態為 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",
...
}
],
...
}
如有必要,執行 az storage entity query
數次直到作業狀態為 Finished
,並在 JobFinishTime
屬性中包含時間戳記。
{
"items": [
{
"JobFinishTime": "2023-02-02T14:21:12Z",
"JobStartTime": "2023-02-02T13:59:42Z",
"JobStatus": "Finished",
...
}
],
...
}
使用 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 資料庫的效能評定架構 包含用來封裝傳遞至基礎基準效能評定體驗的配方,以提供「一鍵式」體驗。 工作負載定義是根據 Azure Cosmos DB 小組和效能評定工具小組所發佈的最佳做法所設計。 配方已經過測試和驗證,以取得一致的結果。
您可以預期會在 GitHub 存放庫 中看到下列所有讀取和寫入配方的延遲。
讀取延遲
寫入延遲
常見問題
本節包含執行效能評定工具時可能發生的常見錯誤。 此工具的錯誤記錄通常可在 Azure 儲存體帳戶內的容器中使用。
如果儲存體帳戶中沒有記錄,此問題通常是因為儲存體連接字串不正確或遺失。 在此情況下,此錯誤會列在用戶端虛擬機器 /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 金鑰 URI 不正確,則此錯誤會同時列在用戶端 VM 和儲存體帳戶中的 agent.out 檔案中。
The input authorization token can't serve the request. The wrong key is being used….
下一步