Azure Cosmos DB의 인덱싱 메트릭
적용 대상: NoSQL
Azure Cosmos DB는 활용된 인덱싱된 경로와 권장되는 인덱싱된 경로를 모두 표시하는 인덱싱 메트릭을 제공합니다. 특히 인덱스 생성 정책을 수정하는 방법을 잘 모르는 경우 인덱스 생성 메트릭을 사용하여 쿼리 성능을 최적화할 수 있습니다.
지원되는 SDK 버전
인덱싱 메트릭은 다음 SDK 버전에서 지원됩니다. | SDK | 지원되는 버전 | | --- | --- | | .NET SDK v3 | >= 3.21.0 | | Java SDK v4 | >= 4.19.0 | | Python SDK | >= 4.6.0 |
인덱싱 메트릭 사용
PopulateIndexMetrics
속성을 true
로 설정하여 쿼리에 대한 인덱싱 메트릭을 사용하도록 설정할 수 있습니다. 지정하지 않으면 PopulateIndexMetrics
의 기본값은 false
입니다. 쿼리 성능 문제 해결을 위해서만 인덱스 메트릭을 사용하도록 설정하는 것이 좋습니다. 쿼리와 인덱싱 정책이 동일하게 유지되는 한 인덱스 메트릭은 변경되지 않을 것입니다. 대신 진단 로그를 사용하여 쿼리 RU 요금 및 대기 시간을 모니터링하여 값비싼 쿼리를 식별하는 것이 좋습니다.
string sqlQueryText = "SELECT TOP 10 c.id FROM c WHERE c.Item = 'value1234' AND c.Price > 2";
QueryDefinition query = new QueryDefinition(sqlQueryText);
FeedIterator<Item> resultSetIterator = container.GetItemQueryIterator<Item>(
query, requestOptions: new QueryRequestOptions
{
PopulateIndexMetrics = true
});
FeedResponse<Item> response = null;
while (resultSetIterator.HasMoreResults)
{
response = await resultSetIterator.ReadNextAsync();
Console.WriteLine(response.IndexMetrics);
}
예제 출력
이 예제 쿼리에서는 활용된 경로 /Item/?
및 /Price/?
와 잠재적인 복합 인덱스 (/Item ASC, /Price ASC)
를 관찰합니다.
Index Utilization Information
Utilized Single Indexes
Index Spec: /Item/?
Index Impact Score: High
---
Index Spec: /Price/?
Index Impact Score: High
---
Potential Single Indexes
Utilized Composite Indexes
Potential Composite Indexes
Index Spec: /Item ASC, /Price ASC
Index Impact Score: High
---
활용된 인덱싱된 경로
활용된 단일 인덱스와 활용된 복합 인덱스는 각각 쿼리가 사용한 포함된 경로와 복합 인덱스를 보여 줍니다. 쿼리는 여러 인덱싱된 경로를 사용할 수 있을 뿐만 아니라 포함된 경로와 복합 인덱스를 혼합하여 사용할 수 있습니다. 인덱싱된 경로가 사용된 것으로 나열되지 않으면 인덱싱된 경로를 제거해도 쿼리 성능에 영향을 주지 않습니다.
쿼리가 해당 경로를 사용했다는 증거로 활용된 인덱싱된 경로 목록을 고려합니다. 새 인덱싱된 경로가 쿼리 성능을 개선시킬지 확실하지 않은 경우 새 인덱싱된 경로를 추가하고 쿼리에서 사용하는지 확인해야 합니다.
잠재적인 인덱싱된 경로
잠재적인 단일 인덱스와 잠재적 복합 인덱스는 각각 포함된 경로와 복합 인덱스를 보여 줍니다. 추가된 경우 쿼리가 활용할 수 있습니다. 잠재적인 인덱싱된 경로가 보이면 인덱싱 정책에 추가하는 것을 고려하고 쿼리 성능이 개선되는지 관찰해야 합니다.
쿼리가 특정 인덱싱된 경로를 사용할 것이라는 결정적인 증거가 아니라 권장 사항으로 잠재적인 인덱싱된 경로 목록을 고려합니다. 잠재적인 인덱싱된 경로는 쿼리에서 사용할 수 있는 인덱싱된 경로의 전체 목록이 아닙니다. 또한 일부 잠재적인 인덱싱된 경로는 쿼리 성능에 영향을 미치지 않을 수 있습니다. 권장 인덱스가 생성된 경로를 추가하고 쿼리 성능이 개선되는지 확인합니다.
참고 항목
인덱싱 메트릭에 대한 피드백이 있나요? 많은 의견 부탁드립니다. 언제든지 자유롭게 Azure Cosmos DB 엔지니어링 팀(cosmosdbindexing@microsoft.com)과 피드백을 직접 공유해 주세요.
지수 영향 점수
인덱스 영향 점수는 쿼리 형태를 기반으로 하는 인덱스 경로가 쿼리 성능에 상당한 영향을 미칠 가능성입니다. 즉, 인덱스 영향 점수는 특정 인덱싱된 경로가 없었다면 쿼리 RU 요금이 훨씬 더 높았을 확률입니다.
가능한 인덱스 영향 점수는 높음 및 낮음입니다. 인덱스가 생성된 경로가 여러 개 있는 경우 영향 점수가 높은 인덱스가 생성된 경로에 집중하는 것이 좋습니다.
인덱스 영향 점수에 사용되는 유일한 기준은 쿼리 형태입니다. 예를 들어, 아래 쿼리에서 인덱스가 생성된 경로 /name/?
에는 높은 인덱스 영향 점수가 할당됩니다.
SELECT *
FROM c
WHERE c.name = "Samer"
데이터의 특성에 따른 실제 영향입니다. 몇 개의 항목만 /name
필터와 일치하는 경우 인덱싱된 경로는 쿼리 RU 요금을 크게 개선시킵니다. 그러나 대부분의 항목이 결국 /name
필터와 일치하면 인덱싱된 경로가 쿼리 성능을 개선시키지 못할 수 있습니다. 이러한 각각의 경우에 인덱스가 생성된 경로 /name/?
에는 쿼리 형태에 따라 인덱스가 생성된 경로가 쿼리 성능을 개선시킬 가능성이 높기 때문에 높은 인덱스 영향 점수가 할당됩니다.
추가 예제
예제 쿼리
SELECT c.id
FROM c
WHERE c.name = 'Tim' AND c.age > 15 AND c.town = 'Redmond' AND c.timestamp > 2349230183
인덱스 메트릭
Index Utilization Information
Utilized Single Indexes
Index Spec: /name/?
Index Impact Score: High
---
Index Spec: /age/?
Index Impact Score: High
---
Index Spec: /town/?
Index Impact Score: High
---
Index Spec: /timestamp/?
Index Impact Score: High
---
Potential Single Indexes
Utilized Composite Indexes
Potential Composite Indexes
Index Spec: /name ASC, /town ASC, /age ASC
Index Impact Score: High
---
Index Spec: /name ASC, /town ASC, /timestamp ASC
Index Impact Score: High
---
이러한 인덱스 메트릭은 쿼리가 인덱스화된 경로 /name/?
, /age/?
, /town/?
및 /timestamp/?
를 사용했음을 보여 줍니다. 인덱스 메트릭은 또한 복합 인덱스 (/name ASC, /town ASC, /age ASC)
및 (/name ASC, /town ASC, /timestamp ASC)
를 추가하면 성능이 더욱 개선될 가능성이 높음을 나타냅니다.
다음 단계
다음 문서에서 인덱싱에 대해 자세히 알아보세요.