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

데이터베이스 프로파일러 출력

이 페이지의 내용

  • 예시 system.profile 문서
  • 출력 참조

데이터베이스 프로파일러는 읽기 및 쓰기 작업, 커서 작업 및 데이터베이스 명령에 대한 데이터 정보를 캡처합니다. 데이터베이스 프로파일을 구성하고 프로파일 데이터 캡처 임계값을 설정하려면 데이터베이스 프로파일러 섹션을 참조하세요.

데이터베이스 프로파일러는 고정 사이즈 컬렉션system.profile 컬렉션에 데이터를 씁니다. 프로파일러의 출력을 보려면 system.profile 컬렉션에서 일반 MongoDB 쿼리를 사용합니다.

참고

데이터베이스 프로파일러는 데이터베이스의 system.profile 컬렉션에 데이터를 쓰기 때문에 읽기 전용인 데이터베이스의 경우에도 일부 쓰기 활동을 프로파일링합니다.

currentOp데이터베이스 프로파일러 는 다음을 포함한 모든 CRUD 작업에 대해 동일한 기본 진단 정보를 보고합니다.

이러한 작업은 느린 쿼리 로깅에도 포함됩니다. 느린 쿼리 로깅에 대한 자세한 내용은 slowOpThresholdMs를 참조하세요.

이제 트랜잭션 내에서 system.profile 컬렉션에 대해 읽기를 포함한 모든 연산을 수행할 수 없습니다.

경고

MongoDB Server가 충돌하므로 system.profile 이라는 이름의 time series 컬렉션 또는 뷰를 만들려고 시도하지 마세요.

다음은 독립형 작업에 대한 system.profile collection에 있는 몇 가지 문서입니다.

system.profile 컬렉션의 다음 문서에는 test.report 컬렉션에 대한 샘플 쿼리 작업에 대한 메트릭이 나와 있습니다.

{
"op" : "query",
"ns" : "test.report",
"command" : {
"find" : "report",
"filter" : { "a" : { "$lte" : 500 } },
"lsid" : {
"id" : UUID("5ccd5b81-b023-41f3-8959-bf99ed696ce9")
},
"$db" : "test"
},
"cursorid" : 33629063128,
"keysExamined" : 101,
"docsExamined" : 101,
"fromMultiPlanner" : true,
"numYield" : 2,
"nreturned" : 101,
"queryHash" : "811451DD",
"planCacheKey" : "759981BA",
"queryFramework" : "classic",
"locks" : {
"Global" : {
"acquireCount" : {
"r" : NumberLong(3),
"w" : NumberLong(3)
}
},
"Database" : {
"acquireCount" : { "r" : NumberLong(3) },
"acquireWaitCount" : { "r" : NumberLong(1) },
"timeAcquiringMicros" : { "r" : NumberLong(69130694) }
},
"Collection" : {
"acquireCount" : { "r" : NumberLong(3) }
}
},
"storage" : {
"data" : {
"bytesRead" : NumberLong(14736),
"timeReadingMicros" : NumberLong(17)
}
},
"responseLength" : 1305014,
"protocol" : "op_msg",
"millis" : 69132,
"planSummary" : "IXSCAN { a: 1, _id: -1 }",
"execStats" : {
"stage" : "FETCH",
"nReturned" : 101,
"executionTimeMillisEstimate" : 0,
"works" : 101,
"advanced" : 101,
"needTime" : 0,
"needYield" : 0,
"saveState" : 3,
"restoreState" : 2,
"isEOF" : 0,
"docsExamined" : 101,
"alreadyHasObj" : 0,
"inputStage" : {
...
}
},
"ts" : ISODate("2019-01-14T16:57:33.450Z"),
"client" : "127.0.0.1",
"appName" : "MongoDB Shell",
"allUsers" : [
{
"user" : "someuser",
"db" : "admin"
}
],
"user" : "someuser@admin"
}

update(및 delete) 작업에 대한 프로필 항목에는 전체 업데이트 명령이 포함되어 있습니다.

system.profile 컬렉션의 다음 문서는 test.report 컬렉션의 샘플 업데이트 작업에 대한 지표를 보여줍니다.

{
"op" : "update",
"ns" : "test.report",
"command" : {
"q" : { },
"u" : { "$rename" : { "a" : "b" } },
"multi" : true,
"upsert" : false
},
"keysExamined" : 0,
"docsExamined" : 25000,
"nMatched" : 25000,
"nModified" : 25000,
"keysInserted" : 25000,
"keysDeleted" : 25000000,
"numYield" : 6985,
"locks" : {
"Global" : {
"acquireCount" : { "r" : NumberLong(6986), "w" : NumberLong(13972) }
},
"Database" : {
"acquireCount" : { "w" : NumberLong(6986) },
"acquireWaitCount" : { "w" : NumberLong(1) },
"timeAcquiringMicros" : { "w" : NumberLong(60899375) }
},
"Collection" : {
"acquireCount" : { "w" : NumberLong(6986) }
},
"Mutex" : {
"acquireCount" : { "r" : NumberLong(25000) }
}
},
"storage" : {
"data" : {
"bytesRead" : NumberLong(126344060),
"bytesWritten" : NumberLong(281834762),
"timeReadingMicros" : NumberLong(94549),
"timeWritingMicros" : NumberLong(139361)
}
},
"millis" : 164687,
"planSummary" : "COLLSCAN",
"execStats" : {
"stage" : "UPDATE",
"nReturned" : 0,
"executionTimeMillisEstimate" : 103771,
"works" : 25003,
"advanced" : 0,
"needTime" : 25002,
"needYield" : 0,
"saveState" : 6985,
"restoreState" : 6985,
"isEOF" : 1,
"nMatched" : 25000,
"nWouldModify" : 25000,
"wouldInsert" : false,
"inputStage" : {
"stage" : "COLLSCAN",
"nReturned" : 25000,
"executionTimeMillisEstimate" : 0,
"works" : 25002,
"advanced" : 25000,
"needTime" : 1,
"needYield" : 0,
"saveState" : 31985,
"restoreState" : 31985,
"isEOF" : 1,
"direction" : "forward",
"docsExamined" : 25000
}
},
"ts" : ISODate("2019-01-14T23:33:01.806Z"),
"client" : "127.0.0.1",
"appName" : "MongoDB Shell",
"allUsers" : [
{
"user" : "someuser",
"db" : "admin"
}
],
"user" : "someuser@admin"
}

모든 단일 작업의 경우 데이터베이스 프로파일러에서 생성한 문서에는 다음 필드의 하위 집합이 포함됩니다. 이러한 문서에서 필드의 정확한 선택은 작업 유형에 따라 다릅니다.

느린 작업의 경우 프로파일러 항목진단 로그 메시지storage 정보가 포함됩니다.

참고

MongoDB 버전별 출력을 보려면 해당 버전의 MongoDB 매뉴얼을 참조하세요.

system.profile.op

작업 유형입니다. 가능한 값은 다음과 같습니다.

  • command

  • count

  • distinct

  • geoNear

  • getMore

  • group

  • insert

  • mapReduce

  • query

  • remove

  • update

system.profile.ns

작업이 대상으로 하는 네임스페이스입니다 . MongoDB의 네임스페이스는 데이터베이스 이름 뒤에 점(.)이 오고, 그 뒤에 컬렉션 이름이 오는 형식을 취합니다.

system.profile.command

이 작업과 관련된 전체 명령 객체가 포함된 문서입니다.

예를 들어, 다음 출력에는 test 데이터베이스의 items 컬렉션에 대한 find 작업에 대한 명령 객체가 포함되어 있습니다.

"command" : {
"find" : "items",
"filter" : {
"sku" : 1403978
},
...
"$db" : "test"
}

다음 예시 출력에는 test 데이터베이스의 items 컬렉션에서 커서 ID가 19234103609인 명령에 의해 생성된 getMore 작업에 대한 명령 객체가 포함되어 있습니다.

"command" : {
"getMore" : NumberLong("19234103609"),
"collection" : "items",
"batchSize" : 10,
...
"$db" : "test"
},

명령 문서가 50KB를 초과하는 경우 문서의 형식은 다음과 같습니다.

"command" : {
"$truncated": <string>,
"comment": <string>
}

$truncated 필드는 문서의 comment 필드(있는 경우)를 제외한 문서의 문자열 요약을 포함합니다. 요약이 여전히 50킬로바이트를 초과하면 더 잘리게 되어 문자열 끝에 줄임표(...)로 표시됩니다.

comment 필드는 주석이 작업에 전달된 경우 표시됩니다. 모든 데이터베이스 명령에 주석을 첨부할 수 있습니다.

system.profile.originatingCommand

버전 3.6에서 변경됨.

커서에서 다음 결과 배치를 조회하는 "getmore" 작업의 경우 originatingCommand 필드에 커서를 처음 생성한 전체 명령 객체(예: find 또는 aggregate)가 포함됩니다.

system.profile.cursorid

querygetmore 작업으로 액세스되는 커서의 ID입니다.

system.profile.keysExamined

버전 3.2.0에서 변경되었습니다.

system.profile.nscanned 에서 이름이 변경되었습니다. 작업을 수행하기 위해 MongoDB가 스캔한 인덱스 키의 수입니다.

일반적으로 keysExaminednreturned보다 훨씬 높으면 데이터베이스가 결과 문서를 찾기 위해 많은 인덱스 키를 스캔하고 있다는 뜻입니다. 쿼리 성능을 개선하기 위해 인덱스를 작성 또는 수정하는 것이 좋습니다.

버전 3.4에서 변경됨.

keysExamined 다음 명령과 작업에 사용할 수 있습니다.

system.profile.docsExamined

버전 3.2.0에서 변경됨: system.profile.nscannedObjects 에서 이름이 변경되었습니다.

작업을 수행하기 위해 MongoDB가 스캔한 collection의 문서 수입니다.

버전 3.4에서 변경됨.

docsExamined 다음 명령과 작업에 사용할 수 있습니다.

system.profile.hasSortStage

버전 3.2.0에서 변경됨: system.profile.scanAndOrder 에서 이름이 변경되었습니다.

hasSortStage는 쿼리가 인덱스의 순서를 사용하여 요청된 정렬된 결과를 반환할 수 없을 때 true가 되는 부울입니다. 예를 들어 MongoDB는 커서에서 문서를 받은 후 문서를 정렬해야 합니다. 이 필드는 값이 true인 경우에만 표시됩니다.

버전 3.4에서 변경됨.

hasSortStage 다음 명령과 작업에 사용할 수 있습니다.

system.profile.usedDisk

버전 4.2에 추가되었습니다.

메모리 제한으로 인해 집계 단계에서 데이터를 임시 파일에 썼는지 여부를 나타내는 부울입니다.

usedDisk가 true인 경우에만 표시됩니다.

system.profile.ndeleted

작업을 통해 삭제된 문서 수입니다.

system.profile.ninserted

작업으로 삽입된 문서 수입니다.

system.profile.nMatched

업데이트 작업에 대한 쿼리 조건과 일치하는 문서 수입니다.

system.profile.nModified

업데이트 작업으로 수정된 문서 수입니다.

system.profile.upsert

업데이트 작업의 upsert 옵션 값을 나타내는 부울입니다. upsert이(가) true인 경우에만 표시됩니다.

system.profile.fromMultiPlanner

쿼리 플래너가 쿼리에 대한 성공적인 실행 계획을 선택하기 전에 여러 계획을 평가했는지 여부를 나타내는 부울입니다.

값이 true인 경우에만 표시됩니다.

system.profile.replanned

쿼리 시스템이 캐시된 계획을 제거하고 모든 후보 계획을 재평가했는지 여부를 나타내는 부울입니다.

값이 true인 경우에만 표시됩니다.

system.profile.replanReason

캐시된 계획이 제거된 구체적인 이유를 나타내는 문자열입니다.

replanned 값이 true인 경우에만 표시됩니다.

system.profile.keysInserted

지정된 쓰기 작업에 대해 삽입된 인덱스 키의 수입니다.

system.profile.keysDeleted

3.4에서 제거되었습니다.

작업에서 업데이트가 변경된 인덱스 키의 수입니다. 인덱스 키를 변경하면 데이터베이스가 이전 키를 제거하고 B-트리 인덱스에 새 키를 삽입해야 하기 때문에 약간의 성능 비용이 발생합니다.

system.profile.writeConflicts

쓰기 작업 중에 발생한 충돌 수입니다. 예를 들어 update 작업이 다른 update 작업과 동일한 문서를 수정하려고 시도하는 경우입니다. 쓰기 충돌(write conflict)도 참조하세요.

system.profile.numYield

다른 작업이 완료될 수 있도록 작업을 양보한 횟수입니다. 일반적으로 작업은 MongoDB가 아직 메모리로 완전히 읽지 않은 데이터에 액세스해야 할 때 양보합니다. 이를 통해 MongoDB가 산출 작업에 대한 데이터를 읽는 동안 메모리에 데이터가 있는 다른 작업을 완료할 수 있습니다. 자세한 내용은 작업이 양보되는 경우에 대한 FAQ를 참조하세요.

system.profile.queryHash

쿼리 형태의 해시를 나타내며 쿼리 형태에만 종속되는 16진수 문자열입니다. queryHash는 동일한 쿼리 형태를 가진 느린 쿼리(쓰기 작업의 쿼리 필터 포함)를 식별하는 데 도움이 될 수 있습니다.

참고

다른 해시 함수와 마찬가지로, 두 개의 다른 쿼리 형태가 동일한 해시 값을 생성할 수 있습니다. 그러나 서로 다른 쿼리 형태 간에 해시 충돌이 발생할 가능성은 거의 없습니다.

queryHashplanCacheKey에 대한 자세한 내용은 queryHashplanCacheKey를 참조하십시오.

버전 4.2에 추가되었습니다.

system.profile.planCacheKey

쿼리와 연관된 계획 캐시 항목에 대한 키의 해시입니다.

queryHash와 달리 planCacheKey는 쿼리 형태와 해당 형태에 대해 현재 사용 가능한 모든 인덱스의 함수입니다. 즉, 쿼리 형태를 지원할 수 있는 인덱스를 추가/제거하면 planCacheKey 값은 변경될 수 있으나 queryHash 값은 변경되지 않습니다.

queryHashplanCacheKey에 대한 자세한 내용은 queryHashplanCacheKey를 참조하십시오.

버전 4.2에 추가되었습니다.

system.profile.queryFramework

작업을 처리하는 데 사용되는 쿼리 프레임워크입니다.

system.profile.locks

system.profile.locks는 작업 중에 유지되는 다양한 잠금 유형 및 잠금 모드에 대한 정보를 제공합니다.

가능한 락 유형은 다음과 같습니다.

잠금 유형
설명
ParallelBatchWriterMode

병렬 배치 쓰기 모드의 잠금을 나타냅니다.

이전 버전에서는 PBWM 정보가 Global 잠금 정보의 일부로 보고되었습니다.

ReplicationStateTransition
레플리카 세트 멤버 상태 전환에 취한 잠금을 나타냅니다.
Global
글로벌 락을 나타냅니다.
Database
데이터베이스 락을 나타냅니다.
Collection
컬렉션 락을 나타냅니다.
Mutex
뮤텍스를 나타냅니다.
Metadata
메타데이터 락을 나타냅니다.
oplog
oplog 락을 나타냅니다.

잠금 유형에 사용할 수 있는 잠금 모드는 다음과 같습니다.

잠금 모드
설명
R
공유(S) 락을 나타냅니다.
W
독점(X) 락을 나타냅니다.
r
인텐트 공유(IS) 락을 나타냅니다.
w
인텐트 독점(IX) 락을 나타냅니다.

다양한 락 유형에 대해 반환되는 락 정보에는 다음이 포함됩니다.

system.profile.locks.acquireCount

작업이 지정된 모드에서 잠금을 획득한 횟수입니다.

system.profile.locks.acquireWaitCount

잠금이 충돌 모드에서 유지되었기 때문에 작업이 acquireCount개의 잠금에 도달할 때까지 기다려야 했던 횟수입니다. acquireWaitCountacquireCount보다 작거나 같습니다.

system.profile.locks.timeAcquiringMicros

작업이 잠금을 획득하기 위해 대기해야 했던 누적 시간(마이크로초)입니다.

timeAcquiringMicrosacquireWaitCount로 나누면 특정 잠금 모드의 대략적인 평균 대기 시간을 구할 수 있습니다.

system.profile.locks.deadlockCount

잠금 획득을 기다리는 동안 작업에서 교착 상태가 발생한 횟수입니다.

잠금 모드에 대한 자세한 내용은 MongoDB가 사용하는 잠금 유형은 무엇인가요?를 참조하세요.

system.profile.authorization

버전 5.0.0에 추가되었습니다.

각 작업에 대해 사용자 캐시에 액세스되는 횟수입니다. 이 지표는 작업이 사용자 캐시에 한 번 이상 액세스한 경우에만 표시됩니다.

이러한 지표는 저속 작업 로깅 또는 데이터베이스 프로파일링 이 활성화된 경우에만 사용할 수 있습니다.

system.profile.authorizationdb.currentOp() 출력에 포함되지 않습니다.

system.profile.authorization.startedUserCacheAcquisitionAttempts

작업이 사용자 캐시에 액세스하려고 시도한 횟수입니다.

system.profile.authorization.completedUserCacheAcquisitionAttempts

작업이 사용자 캐시에서 사용자 데이터를 조회한 횟수입니다.

system.profile.authorization.userCacheWaitTimeMicros

작업이 사용자 캐시 응답을 기다리는 데 소비한 총 시간입니다.

system.profile.storage

버전 4.2에 새로 추가됨: (4.0.9부터 사용 가능)

system.profile.storage 정보는 스토리지 엔진 데이터에 대한 지표와 작업 대기 시간을 제공합니다.

특정 스토리지 지표는 값이 0보다 큰 경우에만 반환됩니다.

system.profile.storage.data.bytesRead

버전 4.2에 새로 추가됨: (4.0.9부터 사용 가능)

디스크에서 캐시로 작업을 통해 읽은 바이트 수입니다.

디스크에서 캐시로 읽은 데이터에는 쿼리를 실행하는 데 필요한 모든 것이 포함됩니다. 데이터가 이미 캐시에 있는 경우 디스크에서 읽은 바이트 수는 0일 수 있습니다.

디스크에서 읽은 바이트 수에는 쿼리된 문서보다 더 많은 바이트가 포함됩니다.

  • WiredTiger는 페이지 단위로 읽으며 페이지에는 하나 또는 여러 개의 문서가 포함될 수 있습니다. 문서가 페이지에 있으면 해당 페이지의 모든 문서를 캐시로 읽어와서 bytesRead 값에 포함합니다.

  • 캐시에 페이지 관리(예: 제거 또는 다시 읽기)가 필요한 경우 bytesRead 값에는 이러한 작업의 디스크에서 읽은 데이터가 포함됩니다.

  • 인덱스가 캐시에 없거나 캐시의 인덱스가 오래된 경우, WiredTiger는 디스크에서 여러 내부 및 리프 페이지를 읽어 캐시에서 인덱스를 재구성합니다.

system.profile.storage.data.timeReadingMicros

버전 4.2에 새로 추가됨: (4.0.9부터 사용 가능)

작업이 디스크에서 읽는 데 걸린 시간(마이크로초)입니다.

system.profile.storage.data.bytesWritten

버전 4.2에 새로 추가됨: (4.0.9부터 사용 가능)

작업으로 인해 캐시에서 디스크로 쓰여진 바이트 수입니다.

WiredTiger는 일반적으로 쿼리를 디스크에 쓸 필요가 없습니다. 쿼리에 의해 수정된 데이터는 인메모리 캐시에 기록되며, WiredTiger는 제거 또는 체크포인트 작업의 일부로 디스크로 플러시합니다. 이러한 경우 bytesWritten은 0으로 표시됩니다.

쿼리를 실행하는 스레드에 강제 페이지 관리(예: 제거)가 필요한 경우 WiredTiger는 페이지 내용을 디스크에 씁니다. 이 플러시에는 쿼리 자체의 변경 사항과 관련이 없는 데이터가 포함되어 있을 수 있으며, 이로 인해 bytesWritten이 예상보다 높은 값을 표시할 수 있습니다.

system.profile.storage.data.timeWritingMicros

버전 4.2에 새로 추가됨: (4.0.9부터 사용 가능)

작업이 디스크에 쓰는 데 소요된 시간(마이크로초)입니다.

system.profile.storage.timeWaitingMicros.cache

버전 4.2에 새로 추가됨: (4.0.9부터 사용 가능)

작업이 캐시의 공간을 확보하기 위해 대기해야 했던 시간(마이크로초)입니다.

system.profile.storage.timeWaitingMicros.schemaLock

버전 4.2에 새로 추가됨: (4.0.9부터 사용 가능)

작업(스키마를 수정하는 경우)이 스키마 잠금을 획득하기 위해 기다린 시간(마이크로초)입니다.

system.profile.storage.timeWaitingMicros.handleLock

버전 4.2에 새로 추가됨: (4.0.9부터 사용 가능)

필요한 데이터 핸들에 대한 잠금을 획득하기 위해 작업이 기다린 시간(마이크로초)입니다.

system.profile.nreturned

작업에서 반환된 문서 수입니다.

system.profile.responseLength

작업 결과 문서의 길이(바이트)입니다. responseLength가 크면 성능에 영향을 줄 수 있습니다. 쿼리 작업에 대한 결과 문서의 크기를 제한하려면 다음 중 하나를 사용할 수 있습니다.

참고

MongoDB가 로그에 쿼리 프로필 정보를 기록할 때 responseLength 값은 이름이 reslen인 필드에 있습니다.

system.profile.protocol

MongoDB Wire Protocol 요청 메시지 형식입니다.

system.profile.millis

mongod 관점에서 작업 시작부터 작업 종료까지의 시간(밀리초)입니다.

system.profile.planSummary

실행 계획에 대한 요약입니다.

system.profile.execStats

쿼리 작업의 실행 통계가 포함된 문서입니다. 다른 작업의 경우 값은 빈 문서입니다.

system.profile.execStats(은)는 통계를 트리로 표시하며, 각 노드는 쿼리 작업의 해당 단계에서 실행된 작업에 대한 통계를 제공합니다.

참고

단계별로 반환되는 필드가 다르기 때문에 execStats에 대한 다음 필드 목록은 완전한 것이 아닙니다.

system.profile.execStats.stage

쿼리 실행의 일부로 수행되는 작업을 설명하는 이름입니다(예:

  • COLLSCAN 컬렉션 스캔용

  • IXSCAN 인덱스 키 스캔용

  • FETCH 문서 검색용

system.profile.execStats.inputStages

현재 단계의 입력 단계인 작업에 대한 통계가 포함된 배열입니다.

system.profile.ts

작업의 타임스탬프입니다.

system.profile.client

작업이 시작된 클라이언트 연결의 IP 주소 또는 호스트 이름입니다.

system.profile.appName

작업을 실행한 클라이언트 애플리케이션의 식별자입니다. appName 연결 문자열 옵션을 사용하여 appName 필드에 대한 사용자 지정 값을 설정합니다.

system.profile.allUsers

세션에 대해 인증된 사용자 정보(사용자 이름 및 데이터베이스 )의 배열 입니다. 자체 관리 배포서버의 사용자도 참조하세요.

system.profile.user

작업을 실행한 인증된 사용자입니다. 인증된 사용자가 작업을 실행하지 않은 경우 이 필드의 값은 빈 문자열입니다.

돌아가기

Database Profiler