데이터베이스에 대한 FinOps 모범 사례
이 문서에서는 데이터베이스 서비스에 대해 입증된 FinOps 사례의 컬렉션을 간략하게 설명합니다. 비용을 최적화하고, 효율성을 향상시키고, ARG(Azure Resource Graph) 쿼리를 사용하여 데이터베이스 리소스에 대한 인사이트를 얻기 위한 전략을 제공합니다. 이러한 사례를 따르면 데이터베이스 서비스가 비용 효율적이고 조직의 재무 목표에 부합하는지 확인할 수 있습니다.
Cosmos DB
다음 섹션에서는 Cosmos DB에 대한 ARG 쿼리를 제공합니다. 이러한 쿼리는 Cosmos DB 계정에 대한 인사이트를 얻고 적절한 RU(요청 단위)로 구성되었는지 확인하는 데 도움이 됩니다. Azure Advisor에서 사용 패턴을 분석하고 권장 사항을 표시하면 비용 효율성을 위해 RU를 최적화할 수 있습니다.
쿼리: Cosmos DB 요청 단위 확인
이 ARG 쿼리는 Azure 환경 내의 Cosmos DB 계정을 분석하여 적절한 RU로 구성되었는지 확인합니다.
설명
이 쿼리는 사용 패턴에 따라 RU를 최적화하기 위한 권장 사항이 포함된 Cosmos DB 계정을 식별합니다. 비용 효율성을 위해 RU를 조정하기 위해 Azure Advisor의 권장 사항을 표시합니다.
범주
Optimization
쿼리
advisorresources
| where type =~ 'microsoft.advisor/recommendations'
| where properties.impactedField == 'microsoft.documentdb/databaseaccounts'
and properties.recommendationTypeId == '8b993855-1b3f-4392-8860-6ed4f5afd8a7'
| order by id asc
| project
id, subscriptionId, resourceGroup,
CosmosDBAccountName = properties.extendedProperties.GlobalDatabaseAccountName,
DatabaseName = properties.extendedProperties.DatabaseName,
CollectionName = properties.extendedProperties.CollectionName,
EstimatedAnnualSavings = bin(toreal(properties.extendedProperties.annualSavingsAmount), 1),
SavingsCurrency = properties.extendedProperties.savingsCurrency
쿼리: 다른 처리량 모드로 전환하면 도움이 되는 Cosmos DB 컬렉션
이 ARG 쿼리는 Azure Advisor 권장 사항에 따라 처리량 모드를 전환하면 도움이 되는 Azure 환경 내의 Cosmos DB 컬렉션을 식별합니다.
설명
이 쿼리는 성능 및 비용을 최적화하기 위해 처리량 모드(예: 수동에서 자동 크기 조정 또는 그 반대의 경우)를 전환하는 권장 사항이 있는 Cosmos DB 컬렉션을 표시합니다. Azure Advisor 권장 사항을 사용하여 잠재적인 개선 사항을 강조 표시합니다.
범주
Optimization
혜택
- 비용 최적화: 사용 패턴 및 권장 사항에 따라 보다 적절한 처리량 모드로 전환하여 비용을 절감할 수 있는 Cosmos DB 컬렉션을 식별합니다.
- 성능 관리: Cosmos DB 컬렉션이 최적의 처리량 모드를 사용하고 성능을 향상시키고 과잉 프로비전 또는 과소 프로비저닝을 방지하도록 합니다.
쿼리
advisorresources
| where type =~ 'microsoft.advisor/recommendations'
| where properties.impactedField == 'microsoft.documentdb/databaseaccounts'
and properties.recommendationTypeId in (
' cdf51428-a41b-4735-ba23-39f3b7cde20c',
' 6aa7a0df-192f-4dfa-bd61-f43db4843e7d'
)
| order by id asc
| project
id, subscriptionId, resourceGroup,
CosmosDBAccountName = properties.extendedProperties.GlobalDatabaseAccountName,
DatabaseName = properties.extendedProperties.DatabaseName,
CollectionName = properties.extendedProperties.CollectionName,
EstimatedAnnualSavings = bin(toreal(properties.extendedProperties.annualSavingsAmount), 1),
SavingsCurrency = properties.extendedProperties.savingsCurrency
쿼리: Cosmos DB 백업 모드 세부 정보
이 ARG 쿼리는 '주기적' 백업 정책을 사용하고 여러 쓰기 위치를 사용하도록 설정하지 않은 Cosmos DB 계정을 분석합니다.
범주
Optimization
쿼리
resources
| where type == "microsoft.documentdb/databaseaccounts"
| where resourceGroup in ({ResourceGroup})
| where properties.backupPolicy.type == 'Periodic'
and tobool(properties.enableMultipleWriteLocations) == false
| extend BackupCopies = toreal(properties.backupPolicy.periodicModeProperties.backupRetentionIntervalInHours)
/ (toreal(properties.backupPolicy.periodicModeProperties.backupIntervalInMinutes) / real(60))
| where BackupCopies >= 10
or (BackupCopies > 2
and toint(properties.backupPolicy.periodicModeProperties.backupRetentionIntervalInHours) <= 168)
| order by id asc
| project id, CosmosDBAccountName=name, resourceGroup, subscriptionId, BackupCopies
SQL Databases
다음 섹션에서는 SQL Database에 대한 ARG 쿼리를 제공합니다. 이러한 쿼리는 유휴 상태이거나, 오래되거나, 개발 중이거나, 테스트 목적으로 사용될 수 있는 SQL 데이터베이스를 식별하는 데 도움이 됩니다. 이러한 데이터베이스를 분석하면 사용량이 부족한 리소스를 서비스 해제하거나 용도를 변경하여 비용을 최적화하고 효율성을 향상시킬 수 있습니다.
쿼리: SQL DB 유휴 상태
이 ARG 쿼리는 SQL 데이터베이스가 오래되거나 개발 중이거나 테스트 목적으로 사용될 수 있음을 나타내는 이름으로 SQL 데이터베이스를 식별합니다.
범주
Optimization
쿼리
resources
| where type == "microsoft.sql/servers/databases"
| where name contains "old" or name contains "Dev"or name contains "test"
| where resourceGroup in ({ResourceGroup})
| extend SQLDBName = name, Type = sku.name, Tier = sku.tier, Location = location
| order by id asc
| project id, SQLDBName, Type, Tier, resourceGroup, Location, subscriptionId
쿼리: 사용되지 않는 탄력적 풀 분석
이 ARG 쿼리는 각 탄력적 풀과 연결된 데이터베이스 수를 분석하여 Azure SQL 환경에서 유휴 상태일 수 있는 탄력적 풀을 식별합니다.
범주
Optimization
쿼리
resources
| where type == "microsoft.sql/servers/elasticpools"
| extend elasticPoolId = tolower(tostring(id))
| extend elasticPoolName = name
| extend elasticPoolRG = resourceGroup
| extend skuName = tostring(sku.name)
| extend skuTier = tostring(sku.tier)
| extend skuCapacity = tostring(sku.capacity)
| join kind=leftouter (
resources
| where type == "microsoft.sql/servers/databases"
| extend elasticPoolId = tolower(tostring(properties.elasticPoolId))
) on elasticPoolId
| summarize databaseCount = countif(isnotempty(elasticPoolId1)) by
elasticPoolId,
elasticPoolName,
serverResourceGroup = resourceGroup,
name,
skuName,
skuTier,
skuCapacity,
elasticPoolRG
| where databaseCount == 0
| project elasticPoolId,
elasticPoolName,
databaseCount,
elasticPoolRG,
skuName,
skuTier,
skuCapacity
더 많은 것을 찾고 계신가요?
우리는 아무것도 놓쳤습니까? 추가된 항목을 보시겠습니까? 여기서 설명한 질문, 문제 또는 해결 방법에 대해 듣고 싶습니다. 여기에 포함된 세부 정보를 사용하여 새 문제를 만듭니다.
관련 콘텐츠
관련 리소스:
관련 솔루션: