데이터 워크로드에 사용할 데이터베이스 유형에 대한 선택 항목이 그 어느 때보다 많아졌습니다. 데이터베이스를 선택하는 주요 요소 중 하나는 데이터베이스 또는 서비스의 성능이지만 벤치마킹 성능은 번거롭고 오류가 발생할 수 있습니다.
Azure Databases의 벤치마킹 프레임워크는 일반적인 모범 사례를 구현하는 낮은 마찰 레시피를 사용하여 인기 있는 오픈 소스 벤치마킹 도구를 사용하여 성능을 측정하는 프로세스를 간소화합니다. NoSQL용 Azure Cosmos DB에서 프레임워크는 Java SDK에 대한 모범 사례를 구현하고 오픈 소스 YCSB 도구를 사용합니다. 이 가이드에서는 이 벤치마킹 프레임워크를 사용하여 읽기 워크로드를 구현하여 프레임워크를 숙지합니다.
필수 조건
Azure Cosmos DB 계정 리소스 만들기
먼저 기존 API for NoSQL 계정에 데이터베이스 및 컨테이너를 만듭니다.
Azure Portal에서 기존 NoSQL용 API 계정으로 이동합니다.
리소스 메뉴에서 데이터 탐색기를 선택합니다.
데이터 탐색기 페이지의 명령 모음에서 새 컨테이너 옵션을 선택합니다.
새 컨테이너 대화 상자에서 다음 설정을 사용하여 새 컨테이너를 만듭니다.
| Setting |
가치 |
|
데이터베이스 ID |
ycsb |
|
데이터베이스 처리량 유형 |
수동 |
|
데이터베이스 처리량 |
400 |
|
컨테이너 ID |
usertable |
|
파티션 키 |
/id |
아직 로그인하지 않은 경우 명령을 사용하여 Azure CLI에 로그인합니다 az login .
다음 값에 대한 셸 변수를 만듭니다.
- 기존 NoSQL용 Azure Cosmos DB 계정의 이름
cosmosAccountName.
- 이름이 지정된 리소스가 있는 첫 번째 리소스 그룹의 이름
sourceResourceGroupName입니다.
- 두 번째 빈 리소스 그룹의 이름입니다
targetResourceGroupName.
- 명명된
cosmosEndpoint 계정 엔드포인트 URI에 대한 기존 Azure Cosmos DB for NoSQL
- NoSQL 계정 기본 키의 이름이
cosmosPrimaryKey인 기존 Azure Cosmos DB
# 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 사용하여 다음 설정을 사용하여 새 데이터베이스를 만듭니다.
| Setting |
가치 |
|
데이터베이스 ID |
ycsb |
|
데이터베이스 처리량 유형 |
수동 |
|
데이터베이스 처리량 |
400 |
az cosmosdb sql database create \
--resource-group $sourceResourceGroupName \
--account-name $cosmosAccountName \
--name "ycsb" \
--throughput 400
명령을 az cosmosdb sql container create 사용하여 다음 설정을 사용하여 새 컨테이너를 만듭니다.
| Setting |
가치 |
|
데이터베이스 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분이 걸릴 수 있습니다.
Azure Resource Manager 템플릿을 사용하여 벤치마킹 프레임워크를 배포하는 데 사용합니다 az deployment group create .
# 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
를 사용하여 ycsbbenchmarkingmetadata명명 az storage entity query 된 스토리지 테이블의 작업 레코드를 쿼리합니다.
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",
...
}
],
...
}
팁 (조언)
작업을 완료하는 데 약 20-30분이 걸릴 수 있습니다.
최근에 수정된 접두사가 있는 스토리지 컨테이너 중 이름을 및 JMESPath 쿼리를 사용하여 찾습니다.
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 Databases의 벤치마킹 프레임워크에는 "1-Click" 환경을 위해 기본 벤치마킹 도구로 전달되는 워크로드 정의를 캡슐화하는 레시피가 포함되어 있습니다. 워크로드 정의는 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….
다음 단계
-
시작 가이드를 사용하여 벤치마킹 도구에 대해 자세히 알아보세요.