데이터 워크로드에 사용할 데이터베이스 유형에 대한 선택 항목이 그 어느 때보다 많습니다. 데이터베이스를 선택하는 주요 요소 중 하나는 데이터베이스 또는 서비스의 성능이지만 벤치마킹 성능은 번거롭고 오류가 발생하기 쉽습니다. Azure Databases의 벤치마킹 프레임워크는 일반적인 모범 사례를 구현하는 마찰이 적은 레시피를 사용하여 인기 있는 오픈 소스 벤치마킹 도구를 사용함으로써 성능을 측정하는 프로세스를 간소화합니다. NoSQL용 Azure Cosmos DB에서 프레임워크는 Java SDK에 대한 모범 사례를 구현하고 오픈 소스 YCSB 도구를 사용합니다. 이 가이드에서는 이 벤치마킹 프레임워크를 사용하여 읽기 워크로드를 구현하여 프레임워크를 숙지합니다.
필수 조건
Azure Cosmos DB 계정 리소스 만들기
먼저 기존 API for NoSQL 계정에 데이터베이스 및 컨테이너를 만듭니다.
Azure Portal에서 기존 NoSQL 계정의 API로 이동합니다.
리소스 메뉴에서 데이터 탐색기를 선택합니다.
Data Explorer 페이지의 명령 모음에서 새 컨테이너 옵션을 선택합니다.
새 컨테이너 대화 상자에서 다음 설정을 사용하여 새 컨테이너를 만듭니다.
설정 |
값 |
데이터베이스 ID |
ycsb |
데이터베이스 처리량 유형 |
수동 |
데이터베이스 처리량 |
400 |
컨테이너 ID |
usertable |
파티션 키 |
/id |
아직 로그인하지 않은 경우 az login
명령을 사용하여 Azure CLI에 로그인합니다.
다음 값에 대한 셸 변수를 만듭니다.
- 이름이
cosmosAccountName
인 기존 Azure Cosmos DB for NoSQL 계정의 이름입니다.
- 이름이
sourceResourceGroupName
인 리소스가 있는 첫 번째 리소스 그룹의 이름입니다.
- 이름이
targetResourceGroupName
인 두 번째 빈 리소스 그룹의 이름입니다.
- 이름이
cosmosEndpoint
인 NoSQL 계정 엔드포인트 URI에 대한 기존 Azure Cosmos DB
- 이름이
cosmosPrimaryKey
인 NoSQL 계정 기본 키에 대한 기존 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
명령으로 다음 설정을 사용하여 새 데이터베이스를 만듭니다.
설정 |
가치 |
데이터베이스 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
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분이 걸릴 수 있습니다.
ycsbbenchmarking-*
를 사용하는 az storage container list
접두사 및 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-클릭" 환경을 위해 기본 벤치마킹 도구에 전달되는 워크로드 정의를 캡슐화하는 레시피가 포함되어 있습니다. 워크로드 정의는 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….
다음 단계
- 시작 가이드를 사용하여 벤치마킹 도구에 대해 자세히 알아보세요.