Docs Menu
Docs Home
/
MongoDB 매뉴얼
/ / /

analyzeShardKey

이 페이지의 내용

  • 정의
  • 호환성
  • 구문
  • 명령 필드
  • 행동
  • 액세스 제어
  • 출력
  • 예시
  • 자세히 알아보기
analyzeShardKey

버전 7.0에 추가.

샤딩되지 않은 컬렉션 또는 샤딩된 컬렉션 에 대한 샤드 키 를 평가하기 위한 지표 를 계산합니다. 지표는 샘플링된 쿼리를 기반으로 합니다. configureQueryAnalyzer 를 사용하여 컬렉션 에 대한 쿼리 샘플링을 구성할 수 있습니다.

이 명령은 다음 환경에서 호스팅되는 배포에서 사용할 수 있습니다.

  • MongoDB Atlas: 클라우드에서의 MongoDB 배포를 위한 완전 관리형 서비스

참고

이 명령은 모든 MongoDB Atlas 클러스터에서 지원됩니다. 모든 명령에 대한 Atlas 지원에 관해 자세히 알아보려면 지원되지 않는 명령을 참조하십시오.

analyzeShardKey 에는 다음 구문이 있습니다.

db.adminCommand(
{
analyzeShardKey: <string>,
key: <shardKey>,
keyCharacteristics: <bool>,
readWriteDistribution: <bool>,
sampleRate: <double>,
sampleSize: <int>
}
)
필드
유형
필요성
설명
analyzeShardKey
문자열
필수 사항

분석할 collection의 네임스페이스입니다.

기본값 은 없습니다.

key
문서
필수 사항

분석할 샤드 키입니다. 이는 샤딩되지 않은 컬렉션 또는 샤딩된 컬렉션의 후보 샤드 키 또는 샤딩된 컬렉션의 현재 샤드 키일 수 있습니다.

기본값 은 없습니다.

keyCharacteristics
부울
옵션

샤드 키의 특성에 대한 지표의 계산 여부입니다. 자세한 내용은 keyCharacteristics를 참조하세요.

기본값은 true입니다.

readWriteDistribution
부울
옵션

읽기 및 쓰기 분포에 대한 지표의 계산 여부입니다. 자세한 내용은 readWriteDistribution을 참조하세요.

기본값은 true입니다.

analyzeShardKey 를 사용하여 컬렉션 에 대한 읽기 및 쓰기 (write) 분포 지표 를 반환하려면 컬렉션 에서 실행 되는 쿼리를 샘플 하도록 쿼리 분석기 를 구성해야 합니다. 그렇지 않으면 analyzeShardKey 는 읽기 및 쓰기 (write) 분포 지표 를 0 값으로 반환합니다. 쿼리 분석기 를 구성하려면 configureQueryAnalyzer를 참조하세요 .

sampleRate
double
옵션

샤드 키 의 특성에 대한 지표 를 계산할 때 샘플 할 컬렉션 의 문서 비율입니다. sampleRate 을 설정하다 하면 sampleSize 을 설정하다 수 없습니다.

0보다 크고 최대 1(을)를 포함해야 합니다.

기본값 은 없습니다.

sampleSize
integer
옵션

샤드키 특성에 대한 지표를 계산할 때 샘플링할 문서 수입니다. sampleSize를 설정하면 sampleRate를 설정할 수 없습니다.

지정되지 않았으며sampleRate(을)를 지정하지 않으면 샘플 크기는 기본적으로 analyzeShardKeyCharacteristicsDefaultSampleSize(으)로 설정된 샘플 크기로 설정됩니다.

analyzeShardKey 메서드를 실행할 때 지정한 keyCharacteristicreadWriteDistribution 값에 따라 다른 지표를 반환합니다.

keyCharacteristic 는 샤드 키의 카디널리티, 빈도, 단조성 에 대한 지표로 구성됩니다. 이 지표는 keyCharacteristics 이 참인 경우에만 반환됩니다.

지표 는 컬렉션 에서 샘플링된 문서를 기반으로 analyzeShardKey 가 실행 때 계산됩니다. 계산을 위해서는 샤드 키 에 지원 인덱스 가 있어야 합니다. 지원 인덱스 가 없는 경우 지표 가 반환되지 않습니다.

sampleRatesampleSize 필드를 사용하여 샘플링을 구성할 수 있습니다. 둘 다 선택 사항이며 하나만 지정할 수 있습니다. 둘 다 지정하지 않으면 샘플 크기가 10 로 설정됩니다. analyzeShardKeyCharacteristicsDefaultSampleSize 을(를) 설정하여 이 값을 구성합니다.

collection의 모든 문서를 기반으로 지표를 계산하려면 sampleRate1 로 설정합니다.

readWriteDistribution 쿼리 라우팅 패턴과 샤드 키 범위의 핫스팟에 대한 지표가 포함되어 있습니다. 이 지표는 샘플링된 쿼리를 기반으로 합니다.

collection에 대한 쿼리 샘플링을 구성하려면 configureQueryAnalyzer 명령을 사용합니다. 읽기 및 쓰기 분포 지표는 readWriteDistributiontrue 인 경우에만 반환됩니다. 지표는 analyzeShardKey 가 실행될 때 계산되며 지표는 샘플링된 읽기 및 쓰기 쿼리를 사용합니다. 샘플링된 쿼리가 없는 경우 읽기 및 쓰기 분포 지표가 반환되지 않습니다.

  • 샘플링된 읽기 쿼리가 없는 경우 명령은 writeDistribution 을 반환하지만 readDistribution 은(는) 생략됩니다.

  • 샘플링된 쓰기 쿼리가 없는 경우 명령은 readDistribution 을 반환하지만 writeDistribution 은(는) 생략합니다.

analyzeShardKey 를 사용하여 컬렉션 에 대한 읽기 및 쓰기 (write) 분포 지표 를 반환하려면 컬렉션 에서 실행 되는 쿼리를 샘플 하도록 쿼리 분석기 를 구성해야 합니다. 그렇지 않으면 analyzeShardKey 는 읽기 및 쓰기 (write) 분포 지표 를 0 값으로 반환합니다. 쿼리 분석기 를 구성하려면 configureQueryAnalyzer를 참조하세요 .

keyCharacteristics
readWriteDistribution
반환된 결과
true
false
false
true
analyzeShardKey readWriteDistribution 지표 를 반환하고 keyCharacteristics 지표 를 생략합니다.
true
true
  • analyzeShardKey readWriteDistribution 메트릭과 keyCharacteristics 메트릭을 모두 반환합니다.

  • 샤드 키에 지원 인덱스가 없는 경우 analyzeShardKeyreadWriteDistribution 지표를 반환하고 keyCharacteristics 지표를 생략합니다.

analyzeShardKey collection에 대한 읽기 또는 쓰기를 차단하지 않습니다.

읽기 및 쓰기 분산에 대한 지표의 품질은 쿼리 샘플링이 발생할 때 워크로드의 대표성 정도에 따라 결정됩니다. 일부 애플리케이션의 경우 대표 메트릭을 반환하려면 며칠 동안 쿼리 샘플링을 켜 두어야 할 수 있습니다.

analyzeShardKey 에 필요한 지원 인덱스는 shardCollection 명령에 필요한 지원 인덱스와 다릅니다.

이 표는 analyzeShardKeyshardCollection 모두에 대해 동일한 샤드 키에 대해 지원하는 인덱스를 보여줍니다.

명령
샤드 키
지원 인덱스

analyzeShardKey

{ a.x: 1, b: "hashed" }
  • { a.x: 1, b: 1, ... }

  • { a.x: "hashed", b: 1, ... }

  • { a.x: 1, b: "hashed", ... }

  • { a.x: "hashed", b: "hashed", ...}

shardCollection
{ a.x: 1, b: "hashed" }
{ a.x: 1, b: "hashed", ... }

이를 통해 아직 샤딩에 필요한 지원 인덱스가 없을 수 있는 샤드 키를 분석할 수 있습니다.

analyzeShardKeyshardCollection 모두 다음과 같은 인덱스 요구 사항이 있습니다.

지원 인덱스를 만들려면 db.collection.createIndex() 메서드를 사용합니다.

성능을 최소화하려면 secondary 또는 secondaryPreferred 읽기 설정 (read preference)으로 analyzeShardKey 를 실행합니다. 샤드 cluster에서 mongos 는 지정하지 않으면 자동으로 읽기 설정 (read preference)을 secondaryPreferred 로 설정합니다.

  • Atlas 공유 클러스터서버리스 인스턴스에서는 analyzeShardKey 를 실행 수 없습니다.

  • 독립형 배포에서는 analyzeShardKey 를 실행할 수 없습니다.

  • --shardsvr 복제본 세트에 대해 직접 analyzeShardKey 를 실행할 수 없습니다. 샤드 cluster에서 실행할 때는 analyzeShardKey 을(를) mongos 에 대해 실행해야 합니다.

  • time-series collection에 대해 analyzeShardKey 를 실행할 수 없습니다.

  • Queryable Encryption을 사용하는 컬렉션에 대해 analyzeShardKey 를 실행할 수 없습니다.

analyzeShardKey 에는 다음 역할 중 하나가 필요합니다.

analyzeShardKey keyCharacteristicsreadWriteDistribution 에 관한 정보를 반환합니다.

  • keyCharacteristics 샤드 키의 카디널리티, 빈도, 단조성에 대한 지표를 제공합니다.

  • readWriteDistribution 쿼리 라우팅 패턴과 샤드 키 범위의 핫스팟에 대한 지표를 제공합니다.

다음은 keyCharacteristicstrue 로 설정할 때 반환되는 keyCharacteristics 문서의 구조입니다.

{
keyCharacteristics: {
numDocsTotal: <integer>,
numOrphanDocs: <integer>,
avgDocSizeBytes: <integer>,
numDocsSampled: <integer>,
isUnique: <bool>,
numDistinctValues: <integer>,
mostCommonValues: [
{ value: <shardkeyValue>, frequency: <integer> },
...
],
monotonicity: {
recordIdCorrelationCoefficient: <double>,
type: "monotonic"|"not monotonic"|"unknown",
}
}
}
필드
유형
설명
사용법
numDocsTotal
integer
collection의 문서 수입니다.
numOrphanDocs
integer
고아 문서 수입니다.
고아 문서는 성능상의 이유로 지표 계산에서 제외되지 않습니다. numOrphanDocsnumDocsTotal 에 비해 큰 경우 고아 문서 수가 collection의 총 문서 수에 비해 매우 작아질 때까지 명령을 실행하는 것이 좋습니다.
avgDocSizeBytes
integer
collection에 있는 문서의 평균 크기(바이트)입니다.
numDocsTotalnumDocsSampled 과 비교하면 각 mostCommonValuesfrequencyavgDocSizeBytes 를 곱하여 가장 큰 청크의 크기를 추정할 수 있습니다.
numDocsSampled
integer
샘플링된 문서 수입니다.
numDistinctValues
integer
고유한 샤드 키 값의 수입니다.
고유 샤드 키 값의 수는 밸런서가 생성할 수 있는 최대 청크 수이므로 numDistinctValues 가 큰 샤드 키를 선택합니다.
isUnique
부울
샤드 키가 고유한지 여부를 나타냅니다. 이 값은 샤드 키에 대한 고유 인덱스가 있는 경우에만 true 로 설정됩니다.
샤드 키가 고유한 경우 고유 값의 수는 문서 수와 동일합니다.
mostCommonValues
문서 배열
가장 일반적인 샤드 키 값의 값과 frequency (문서 수)의 배열입니다.

샤드 키 값의 빈도는 해당 값을 포함하는 청크에 있는 최소 문서 수입니다. 빈도가 높으면 청크가 저장, 읽기 및 쓰기에 병목 현상이 발생할 수 있습니다. 가장 일반적인 각 값의 빈도가 numDocsSampled 에 비해 낮은 샤드 키를 선택합니다.

가장 일반적인 샤드 키 값의 수는 analyzeShardKeyNumMostCommonValues (기본값 5)을 설정하여 구성할 수 있습니다. 응답에 대한 16MB BSON 크기 제한을 초과하는 것을 방지하기 위해, 각 값은 해당 크기가 15MB / analyzeShardKey NumMostCommonValues를 초과하는 경우 'truncated'로 설정됩니다.

mostCommonValues[n].value
문서
샤드 키입니다.
mostCommonValues[n].frequency
integer
지정된 샤드 키에 대한 문서 수입니다.
가장 일반적인 각 값의 빈도가 numDocsSampled 에 비해 낮은 샤드 키를 선택합니다.
monotonicity. recordIdCorrelationCoefficient
double
단조성을 알려진 경우에만 설정됩니다.

다음 중 하나에 해당하면 "unknown" 으)로 설정됩니다.

  • 샤드 키에 shardCollection 정의에 따른 지원 인덱스가 없습니다.

  • 컬렉션이 클러스터링됩니다.

  • 샤드 키는 해시된 필드가 첫 번째 필드가 아닌 해시된 복합 샤드 키입니다.

collection이 청크 마이그레이션을 거친 경우 단조성 검사는 잘못된 결과를 반환할 수 있습니다. 청크 마이그레이션은 기증자 샤드에서 문서를 삭제하고 수신자 샤드에 다시 삽입합니다. 클라이언트의 삽입 순서가 유지된다는 보장은 없습니다.

analyzeShardKeyMonotonycityCorrelationCofluentThreshold를 사용하여 상관 계수에 대한 임계값을 구성할 수 있습니다.

monotoncity.type
문자열

다음 중 하나일 수 있습니다.

"monotonic", "not monotonic", "unknown"

새 문서를 자주 삽입할 것으로 예상되지 않는 경우가 아니라면 "monotonic" 유형의 샤드 키를 사용하지 마세요.

단조롭게 증가하거나 감소하는 샤드 키의 collection이 샤딩되는 경우, MaxKey 또는 MinKey 청크를 소유한 샤드에 새 문서가 삽입됩니다. 해당 샤드는 삽입 시 병목 현상이 발생할 수 있으며, 밸런서가 들어오는 삽입물과 경쟁해야 하기 때문에 데이터의 균형이 대부분 불균형해질 수 있습니다.

다음은 readWriteDistributiontrue 로 설정할 때 반환되는 문서의 구조입니다.

{
readDistribution: {
sampleSize: {
total: <integer>,
find: <integer>,
aggregate: <integer>,
count: <integer>,
distinct: <integer>
},
percentageOfSingleShardReads: <double>,
percentageOfMultiShardReads: <double>,
percentageOfScatterGatherReads: <double>,
numReadsByRange: [
<integer>,
...
]
},
writeDistribution: {
sampleSize: {
total: <integer>,
update: <integer>,
delete: <integer>,
findAndModify: <integer>
},
percentageOfSingleShardWrites: <double>,
percentageOfMultiShardWrites: <double>,
percentageOfScatterGatherWrites: <double>,
numWritesByRange: [
<integer>,
...
],
percentageOfShardKeyUpdates: <double>,
percentageOfSingleWritesWithoutShardKey: <double>,
percentageOfMultiWritesWithoutShardKey: <double>
}
}

analyzeShardKey 를 사용하여 컬렉션 에 대한 읽기 및 쓰기 (write) 분포 지표 를 반환하려면 컬렉션 에서 실행 되는 쿼리를 샘플 하도록 쿼리 분석기 를 구성해야 합니다. 그렇지 않으면 analyzeShardKey 는 읽기 및 쓰기 (write) 분포 지표 를 0 값으로 반환합니다. 쿼리 분석기 를 구성하려면 configureQueryAnalyzer를 참조하세요 .

필드
유형
설명
사용법
sampleSize.total
integer
샘플링된 읽기 쿼리의 총 개수입니다.
sampleSize.find
integer
샘플링된 find 쿼리의 총 개수입니다.
sampleSize.aggregate
integer
샘플링된 aggregate 쿼리의 총 개수입니다.
sampleSize.count
integer
샘플링된 count 쿼리의 총 개수입니다.
sampleSize.distinct
integer
샘플링된 distinct 쿼리의 총 개수입니다.
percentageOfSingleShardReads
double
데이터 분산 방식에 관계없이 단일 샤드를 대상으로 하는 읽기의 백분율입니다.
percentageOfMultiShardReads
double
여러 샤드를 대상으로 하는 읽기의 백분율입니다.

이 범주에는 읽기 대상 값이 단일 샤드에 속하도록 데이터가 분산된 경우 단일 샤드만을 대상으로 할 수 있는 읽기가 포함됩니다.

쿼리가 대량의 데이터에서 작동하는 경우 하나의 샤드 대신 여러 개의 샤드를 대상으로 하는 경우 병렬 쿼리 실행으로 인해 지연 시간이 줄어들 수 있습니다.

percentageOfScatterGatherReads
double
데이터 분산 방식에 관계없이 분산 수집된 읽기의 비율입니다.

이 메트릭에는 값이 높은 샤드 키는 사용하지 마세요. 분산 수집 쿼리는 대상 데이터가 없는 샤드에 미치는 영향은 크지 않지만 여전히 성능에 미치는 영향은 있습니다.

샤드 수가 많은 cluster에서는 분산 수집 쿼리가 단일 샤드를 대상으로 하는 queries보다 성능이 크게 저하됩니다.

numReadsByRange
정수 배열
MinKey 에서 MaxKey 까지 정렬된 각 범위가 타겟팅된 횟수를 나타내는 숫자 배열입니다.

numReadsByRange 분포가 매우 왜곡되면 읽기용 핫 샤드가 하나 이상 있을 수 있으므로 샤드 키를 피합니다.

numReadsByRange 의 합계가 sampleSize.total 와 유사한 샤드 키를 선택합니다.

범위 수는 analyzeShardKeyNumRanges 매개변수를 사용하여 구성할 수 있으며 기본값은 100 입니다. 값이 100 인 이유는 최대 100개의 샤드를 확장하는 샤드 키를 찾는 것이 목표이기 때문입니다.

필드
유형
설명
사용법
sampleSize.total
integer
샘플링된 쓰기 쿼리의 총 개수입니다.
sampleSize.update
integer
샘플링된 update 쿼리의 총 개수입니다.
sampleSize.delete
integer
샘플링된 delete 쿼리의 총 개수입니다.
sampleSize.findAndModify
integer
샘플링된 findAndModify 쿼리의 총 개수입니다.
percentageOfSingleShardWrites
double
데이터 분산 방식에 관계없이 단일 샤드를 대상으로 하는 쓰기의 백분율입니다.
percentageOfMultiShardWrites
double
여러 샤드를 대상으로 하는 쓰기의 백분율입니다.
이 범주에는 쓰기 대상 값이 단일 샤드에 속하도록 데이터가 분산된 경우 단일 샤드만 대상으로 할 수 있는 쓰기가 포함됩니다.
percentageOfScatterGatherWrites
double
데이터 분산 방식에 관계없이 분산 수집된 쓰기의 백분율입니다.
일반적으로 단일 샤드를 대상으로 하는 쓰기가 더 나은 성능을 발휘하므로 이 메트릭에 대해 값이 높은 샤드 키는 피하는 것이 좋습니다.
numWritesByRange
정수 배열
MinKey 에서 MaxKey 까지 정렬된 각 범위가 타겟팅된 횟수를 나타내는 숫자 배열입니다.

numWritesByRange 분포가 매우 왜곡되면 쓰기용 핫 샤드가 하나 이상 있을 수 있으므로 샤드 키를 피합니다.

numWritesByRange 의 합계가 sampleSize.total 와 유사한 샤드 키를 선택합니다.

범위 수는 analyzeShardKeyNumRanges 매개변수를 사용하여 구성할 수 있으며 기본값은 100 입니다. 값이 100 인 이유는 최대 100개의 샤드를 확장하는 샤드 키를 찾는 것이 목표이기 때문입니다.

percentageOfShardKeyUpdates
double
문서의 샤드 키 값 을 업데이트 하는 쓰기 (write) 쿼리의 비율입니다.

percentageOfShardKeyUpdates 가 높은 샤드 키 는 피합니다. 문서의 샤드 키 값 을 업데이트하면 문서 가 다른 샤드 로 이동될 수 있으며, 이를 위해서는 쿼리 대상 샤드 에서 내부 트랜잭션 을 실행해야 합니다. 문서의 샤드 키 값 변경에 대한 자세한 내용은 샤드 키 변경을 참조하세요.

업데이트는 현재 재시도 가능한 쓰기 또는 트랜잭션으로만 지원되며 배치 크기 제한은 1 입니다.

percentageOfSingleWritesWithoutShardKey
double
multi=false 상태이고 단일 샤드를 대상으로 지정할 수 없는 쓰기 쿼리의 비율입니다.

이 지표에는 값이 높은 샤드 키는 사용하지 마세요.

이러한 유형의 쓰기를 수행하는 것은 내부 트랜잭션을 실행하는 것이 포함될 수 있기 때문에 비용이 많이 듭니다.

percentageOfMultiWritesWithoutShardKey
double
multi=true 상태이고 단일 샤드를 대상으로 지정할 수 없는 쓰기 쿼리의 비율입니다.
이 지표에는 값이 높은 샤드 키는 사용하지 마세요.

간소화된 소셜 미디어 앱 버전을 생각해 보세요. 샤딩하려는 컬렉션은 post 컬렉션입니다.

post collection의 문서는 다음과 같은 스키마가 있습니다.

{
userId: <uuid>,
firstName: <string>,
lastName: <string>,
body: <string>, // the field that can be modified.
date: <date>, // the field that can be modified.
}
  • 이 앱의 사용자 수는 1500명입니다.

  • 성 30개, 이름 45개가 있으며, 일부는 다른 이름보다 더 일반적입니다.

  • 세 명의 유명인 사용자가 있습니다.

  • 각 사용자는 정확히 5명의 다른 사용자를 팔로우하며 적어도 한 명의 유명인을 팔로우할 가능성이 매우 높습니다.

  • 각 사용자는 하루에 약 2개 정도의 게시물을 무작위로 게시합니다. 각 게시물은 게시된 직후 한 번씩 수정됩니다.

  • 각 사용자는 6시간마다 로그인하여 지난 24시간 동안 자신의 프로필과 자신이 팔로우하는 사용자의 게시물을 읽습니다. 또한 지난 3시간 동안 임의의 게시물로 답장을 보냅니다.

  • 앱은 모든 사용자에 대해 3일이 지난 자정에 게시물을 제거합니다.

이 워크로드에는 다음과 같은 쿼리 패턴이 있습니다.

  • find 필터가 있는 명령 { userId: , firstName: , lastName: }

  • find 필터가 있는 명령 { $or: [{ userId: , firstName: , lastName:, date: { $gte: }, ] }

  • findAndModify 필터 { userId: , firstName: , lastName: , date: } 와 함께 명령을 입력하여 본문 및 날짜 필드를 업데이트합니다.

  • update 명령에 multi: false 및 필터 { userId: , firstName: , lastName: , date: { $gte: , $lt: } } 를 사용하여 본문 및 날짜 필드를 업데이트합니다.

  • delete multi: true 및 필터 { userId: , firstName: , lastName: , date: { $lt: } }가 포함된 명령

다음은 analyzeShardKey 가 일부 후보 샤드 키에 대해 반환한 지표의 예시이며, 7일 동안의 워크로드에서 수집된 샘플링된 쿼리를 포함합니다.

참고

analyzeShardKey 명령을 실행하기 전에 이 페이지 앞부분의 지원 인덱스 섹션을 읽어보세요. 분석하려는 샤드 키에 대한 지원 인덱스가 필요한 경우 db.collection.createIndex() 메서드를 사용하여 인덱스를 생성합니다.

analyzeShardKey 명령은 social.post collection의 { lastName: 1 } 샤드 키에 대한 지표를 제공합니다.

db.adminCommand(
{
analyzeShardKey: "social.post",
key: { lastName: 1 },
keyCharacteristics: true,
readWriteDistribution: false
}
)

이 명령의 출력은 다음과 유사합니다.

{
"keyCharacteristics": {
"numDocsTotal" : 9039,
"avgDocSizeBytes" : 153,
"numDocsSampled" : 9039,
"isUnique" : false,
"numDistinctValues" : 30,
"mostCommonValues" : [
{
"value" : {
"lastName" : "Smith"
},
"frequency" : 1013
},
{
"value" : {
"lastName" : "Johnson"
},
"frequency" : 984
},
{
"value" : {
"lastName" : "Jones"
},
"frequency" : 962
},
{
"value" : {
"lastName" : "Brown"
},
"frequency" : 925
},
{
"value" : {
"lastName" : "Davies"
},
"frequency" : 852
}
],
"monotonicity" : {
"recordIdCorrelationCoefficient" : 0.0771959161,
"type" : "not monotonic"
},
}
}

analyzeShardKey 명령은 social.post collection의 { userId: 1 } 샤드 키에 대한 지표를 제공합니다.

db.adminCommand(
{
analyzeShardKey: "social.post",
key: { userId: 1 },
keyCharacteristics: true,
readWriteDistribution: false
}
)

이 명령의 출력은 다음과 유사합니다.

{
"keyCharacteristics": {
"numDocsTotal" : 9039,
"avgDocSizeBytes" : 162,
"numDocsSampled" : 9039,
"isUnique" : false,
"numDistinctValues" : 1495,
"mostCommonValues" : [
{
"value" : {
"userId" : UUID("aadc3943-9402-4072-aae6-ad551359c596")
},
"frequency" : 15
},
{
"value" : {
"userId" : UUID("681abd2b-7a27-490c-b712-e544346f8d07")
},
"frequency" : 14
},
{
"value" : {
"userId" : UUID("714cb722-aa27-420a-8d63-0d5db962390d")
},
"frequency" : 14
},
{
"value" : {
"userId" : UUID("019a4118-b0d3-41d5-9c0a-764338b7e9d1")
},
"frequency" : 14
},
{
"value" : {
"userId" : UUID("b9c9fbea-3c12-41aa-bc69-eb316047a790")
},
"frequency" : 14
}
],
"monotonicity" : {
"recordIdCorrelationCoefficient" : -0.0032039729,
"type" : "not monotonic"
},
}
}

analyzeShardKey 명령은 social.post collection의 { userId: 1 } 샤드 키에 대한 지표를 제공합니다.

db.adminCommand(
{
analyzeShardKey: "social.post",
key: { userId: 1 },
keyCharacteristics: false,
readWriteDistribution: true
}
)

이 명령의 출력은 다음과 유사합니다.

{
"readDistribution" : {
"sampleSize" : {
"total" : 61363,
"find" : 61363,
"aggregate" : 0,
"count" : 0,
"distinct" : 0
},
"percentageOfSingleShardReads" : 50.0008148233,
"percentageOfMultiShardReads" : 49.9991851768,
"percentageOfScatterGatherReads" : 0,
"numReadsByRange" : [
688,
775,
737,
776,
652,
671,
1332,
1407,
535,
428,
985,
573,
1496,
...
],
},
"writeDistribution" : {
"sampleSize" : {
"total" : 49638,
"update" : 30680,
"delete" : 7500,
"findAndModify" : 11458
},
"percentageOfSingleShardWrites" : 100,
"percentageOfMultiShardWrites" : 0,
"percentageOfScatterGatherWrites" : 0,
"numWritesByRange" : [
389,
601,
430,
454,
462,
421,
668,
833,
493,
300,
683,
460,
...
],
"percentageOfShardKeyUpdates" : 0,
"percentageOfSingleWritesWithoutShardKey" : 0,
"percentageOfMultiWritesWithoutShardKey" : 0
}
}

돌아가기

addShardToZone