MongoDB 버전 3.0부터 간단히 순서를 변경합니다.
collection.aggregate(...).explain()
에
collection.explain().aggregate(...)
원하는 결과를 얻을 수 있습니다 ( 여기에 문서 ).
2.6보다 큰 이전 버전의 경우 집계 파이프 라인 작업에 대한 옵션 을 사용해야합니다.explain
explain:true
db.collection.aggregate([
{ $project : { "Tags._id" : 1 }},
{ $unwind : "$Tags" },
{ $match: {$or: [{"Tags._id":"tag1"},{"Tags._id":"tag2"}]}},
{ $group: {
_id : "$_id",
count: { $sum:1 }
}},
{$sort: {"count":-1}}
],
{
explain:true
}
)
집계 프레임 워크 중요한 고려 사항 인덱스는 파이프 라인에 대한 초기 데이터를 가져 오는 데 사용할 수 있다는 것입니다 (예 : 사용 $match
, $sort
, $geonear
파이프 라인의 시작 부분)뿐만 아니라 다음 $lookup
과 $graphLookup
단계. 데이터 처리 집약 파이프 라인으로 인출되어있다 (예처럼 단계를 통과하면 $project
, $unwind
, 및 $group
)는 상기 조작에 메모리 (경우 생성 가능한 임시 파일을 사용할 것이다 allowDiskUse
옵션 설정 됨).
파이프 라인 최적화
일반적으로 다음과 같은 방법으로 집계 파이프 라인을 최적화 할 수 있습니다.
- 파이프 라인 시작
$match
처리를 관련 문서로 제한 단계로 .
- 효율적인 색인에 의해 초기
$match
/ $sort
단계가 지원 되는지 확인합니다 .
- 필터링 데이터는 초기 사용
$match
, $limit
및 $skip
.
- 불필요한 단계 및 문서 조작 최소화 (복잡한 집계 체조가 필요한 경우 스키마를 재고 할 수 있음).
- MongoDB 서버를 업그레이드 한 경우 최신 집계 연산자를 활용합니다. 예를 들어 MongoDB 3.4 는 배열, 문자열 및 패싯 작업 지원을 포함하여 많은 새로운 집계 단계 및 표현식 을 추가했습니다 .
또한 여러 집계 파이프 라인 최적화가 있습니다.MongoDB 서버 버전에 따라 자동으로 발생 있습니다. 예를 들어, 출력 결과에 영향을주지 않고 실행을 개선하기 위해 인접한 단계를 통합 및 / 또는 재정렬 할 수 있습니다.
한계
MongoDB 3.4에서와 같이 집계 프레임 워크 explain
옵션은 파이프 라인 처리 방법에 대한 정보를 제공하지만 쿼리 executionStats
모드 와 동일한 수준의 세부 정보를 지원하지 않습니다 find()
. 초기 쿼리 실행을 최적화하는 데 중점을 두는 경우 해당 find().explain()
쿼리를 executionStats
또는 allPlansExecution
자세한 수준으로 검토하는 것이 도움이 될 수 있습니다 .
집계 파이프 라인을 최적화 / 프로파일 링하는 데 도움이되는 더 자세한 실행 통계와 관련하여 MongoDB 문제 추적기에서 감시 / 찬성 할 몇 가지 관련 기능 요청이 있습니다.