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

db.setProfilingLevel()

이 페이지의 내용

  • 정의
  • 호환성
  • 구문
  • 매개변수
  • 반환
  • 행동
  • 예시
  • 프로파일러 활성화 및 저속 작업 임계값과 샘플 속도 설정
  • 프로파일러 비활성화 및 저속 작업 임계값과 샘플 속도 설정
  • 프로파일링될 작업을 결정하기 위한 필터 설정
  • 필터 설정 해제
db.setProfilingLevel(level, options)

버전 5.0에서 변경됨

mongod 인스턴스의 경우 이 메서드는 데이터베이스 프로파일러를 활성화, 비활성화 또는 구성합니다. 프로파일러는 실행 중인 mongod 인스턴스에서 쓰기 작업, 커서 및 데이터베이스 명령의 성능에 대한 데이터를 캡처하고 기록합니다. 프로파일러가 비활성화된 경우 이 메서드는 저속 작업이 진단 로그에 기록되는 방식을 구성합니다.

참고

db.setProfilingLevel()이 포함된 프로파일링 수준의 변경 사항은 지속되지 않습니다. 서버가 다시 시작되면 이 값은 0(기본값) 또는 operationProfiling.mode 설정이나 --profile 명령줄 옵션으로 설정된 값으로 되돌아갑니다.

데이터베이스 프로파일러 수준1 또는 2인 경우(특히 데이터베이스 프로파일러가 활성화된 경우) slowms, sampleRate는 프로파일러와 diagnostic log의 동작에 모두 영향을 미칩니다.

데이터베이스 프로파일러 수준0일 경우(특히, 데이터베이스 프로파일러가 비활성화된 경우), slowmssampleRate는 진단 로그에만 영향을 줍니다.

mongos 인스턴스를 사용하면 이 메서드는 slowms, sampleRate, filter 구성 설정을 설정하여 진단 로그에 작업이 기록되는 방식을 구성합니다. mongos에는 프로파일러가 쓸 수 있는 컬렉션이 없으므로 mongos 인스턴스에 데이터베이스 프로파일러를 활성화할 수 없습니다. mongos 인스턴스의 경우 profile 수준은 0이어야 합니다.

mongodmongos 인스턴스에 필터를 지정하여 프로파일러가 어떤 작업을 기록하도록 할지 제어할 수 있습니다. 프로파일러에 filter를 지정하면 프로파일링 및 느린 쿼리 로그 줄에 slowmssampleRate 옵션이 사용되지 않습니다.

db.setProfilingLevel()profile 명령에 대한 래퍼(wrapper)를 제공합니다.

MongoDB 5.0부터 profile 명령 또는 db.setProfilingLevel() 래퍼(wrapper) 메서드를 사용하여 데이터베이스 프로파일러 level, slowms, sampleRate 또는 filter에 대한 변경 사항이 log file에 기록됩니다.

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

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

중요

이 명령은 M0, M2 및 M5 클러스터에서 지원되지 않습니다. 자세한 내용은 지원되지 않는 명령을 참조하세요.

db.setProfilingLevel() 메서드의 형식은 다음과 같습니다.

db.setProfilingLevel(<level>, <options>)
Parameter
유형
설명
integer

데이터베이스 프로파일러 수준을 구성합니다. 사용할 수 있는 프로파일러 수준은 다음과 같습니다.

0
프로파일러가 꺼져 있고 데이터를 수집하지 않습니다. 이것이 기본 설정된 프로파일러 수준입니다.
1

프로파일러는 slowms 임계값을 초과하거나 지정된 필터와 일치하는 작업에 대한 데이터를 수집합니다.

필터가 설정된 경우:

  • slowms, sampleRate 옵션은 프로파일링에 사용되지 않습니다.

  • 프로파일러는 필터와 일치하는 작업만 캡처합니다.

2
프로파일러가 모든 작업의 데이터를 수집합니다.

mongos에서는 프로파일링을 사용할 수 없기 때문에 db.setProfilingLevel()을 사용하여 mongos 인스턴스에서 프로파일링 수준을 0 이외의 값으로 설정할 수 없습니다.

문서 또는 정수

선택 사항입니다. 정수 또는 옵션 문서를 사용할 수 있습니다. 문서 대신 options 인수로 정수 값이 전달되면 해당 값은 slowms에 할당됩니다. 사용 가능한 옵션은 다음과 같습니다.

Default: 100
Type: integer

느린 작동 시간 임계값(밀리초 단위)입니다. 이 임계값보다 오래 실행되는 작업은 느린 것으로 간주됩니다.

느린 작업은 MongoDB가 해당 작업에 소요하는 시간인 workingMillis를 기준으로 기록됩니다. 즉 잠금 대기 및 흐름 제어와 같은 요소는 작업이 느린 작업 임계값을 초과하는지 여부에 영향을 미치지 않습니다.

logLevel0으로 설정하면, MongoDB는 slowOpSampleRate 의해 결정되는 속도로 느린 작업을 진단 로그에 기록합니다.

logLevel을 더 높게 설정하면 높으면 모든 작업이 지연 시간과 관계없이 진단 로그에 표시됩니다. 단, 세컨더리의 저속 oplog 항목 메시지 로깅은 예외입니다. 세컨더리 로그는 oplog 항목만 기록하며, logLevel 을 높여도 모든 oplog 항목이 기록되지는 않습니다.

mongod 2} 인스턴스의 경우 이 설정은 진단 로그와 프로파일러(사용 설정된 경우)에 모두 영향을 줍니다.

mongos 인스턴스의 경우, mongos에서는 프로파일링을 사용할 수 없으므로 이 설정은 진단 로그에만 영향을 미치고 프로파일러에는 영향을 미치지 않습니다.

이 인수는 구성 파일 옵션 slowOpThresholdMs와 동일한 설정에 영향을 줍니다.

Default: 1.0
Type: double

프로파일링하거나 기록해야 하는 저속 작업의 비율입니다. sampleRate에 0과 1(두 값 모두 포함) 사이의 값을 사용할 수 있습니다.

mongod 2} 인스턴스의 경우 이 설정은 진단 로그와 프로파일러(사용 설정된 경우)에 모두 영향을 줍니다.

mongos 인스턴스의 경우, mongos에서는 프로파일링을 사용할 수 없으므로 이 설정은 진단 로그에만 영향을 미치고 프로파일러에는 영향을 미치지 않습니다.

이 인수는 구성 옵션 slowOpSampleRate와 동일한 설정에 영향을 줍니다.

유형: 객체

프로파일링되고 기록되는 작업을 제어하는 필터 표현식입니다. 필터 표현식의 필드는 프로파일러 출력의 모든 필드가 될 수 있습니다.

mongod 2} 인스턴스의 경우 이 설정은 진단 로그와 프로파일러(사용 설정된 경우)에 모두 영향을 줍니다.

mongos 인스턴스의 경우, mongos에서는 프로파일링을 사용할 수 없으므로 이 설정은 진단 로그에만 영향을 미치고 프로파일러에는 영향을 미치지 않습니다.

MongoDB 8.0 부터는 MongoDB가 해당 작업에 소비한 시간을 기준으로 작업을 기록하기 위해 workingMillis를 필터 매개 변수로 지정할 수 있습니다.

기록된 작업을 제어하는 데 사용되는 필터의 예를 보려면 프로파일링된 작업을 결정하기 위한 필터 설정을 참조하세요.

프로파일링 필터가 설정된 경우 slowmssampleRate 옵션은 진단 로그 또는 프로파일러에 영향을 주지 않습니다.

이 메서드는 해당 설정의 이전 값이 포함된 문서를 반환합니다.

{
"was" : 2,
"slowms" : 100,
"sampleRate" : 1,
"filter" : {
"$and" : [
{
"op" : {
"$eq" : "query"
}
},
{
"millis" : {
"$gt" : 20000
}
}
]
},
"note" : "When a filter expression is set, slowms and sampleRate are not used for profiling and slow-query log lines.",
"ok" : 1
}
{
"was" : 0,
"slowms" : 100,
"sampleRate" : 1,
"filter" : {
"$and" : [
{
"op" : {
"$eq" : "query"
}
},
{
"millis" : {
"$gte" : 2000
}
}
]
},
"note" : "When a filter expression is set, slowms and sampleRate are not used for profiling and slow-query log lines.",
"ok" : 1,
"$clusterTime" : {
"clusterTime" : Timestamp(1572991238, 1),
"signature" : {
"hash" : BinData(0,"hg6GnlrVhV9MAhwWdeHmHQ4T4qU="),
"keyId" : NumberLong("6755945537557495811")
}
},
"operationTime" : Timestamp(1572991238, 1)
}
{
"was" : 0,
"slowms" : 100,
"sampleRate" : 1,
"filter" : {
"$and" : [
{
"op" : {
"$eq" : "query"
}
},
{
"millis" : {
"$gte" : 2000
}
}
]
},
"note" : "When a filter expression is set, slowms and sampleRate are not used for profiling and slow-query log lines.",
"ok" : 1,
"operationTime" : Timestamp(1572991499, 2),
"$clusterTime" : {
"clusterTime" : Timestamp(1572991499, 2),
"signature" : {
"hash" : BinData(0,"nhCquIxUw7thlrBudXe3PnsnvP0="),
"keyId" : NumberLong("6755946491040235540")
}
}
}

구제척으로:

  • was이전 수준 설정입니다.

  • slowms이전 slowms 설정입니다.

  • sampleRate이전 sampleRate 설정입니다.

  • filter이전 필터 설정입니다.

  • notefilter의 동작을 설명하는 문자열입니다. 이 필드는 filter도 있는 경우에만 출력에 나타납니다.

참고

filternote 필드는 이전 수준 설정에 있었던 경우에만 출력에 나타납니다.

현재 프로파일링 수준을 보려면 db.getProfilingStatus()를 참조하세요.

경고

프로파일링은 성능을 저하시키고 시스템 로그에서 암호화되지 않은 쿼리 데이터를 노출시킬 수 있습니다. 프로덕션 배포서버에서 프로파일러를 구성하고 활성화하기 전에 이것이 성능과 보안에 미치는 영향을 신중하게 고려하세요.

잠재적인 성능 저하에 대한 자세한 내용은 프로파일러 오버헤드를 참조하십시오.

다음은 mongod 인스턴스에서 설정할 수 있는 값의 예입니다.

db.setProfilingLevel(1, { slowms: 20, sampleRate: 0.42 })

이 작업은 이전 설정 값이 포함된 문서를 반환합니다.

현재 프로파일링 수준을 보려면 db.getProfilingStatus()를 참조하세요.

다음은 mongod 또는 mongos 인스턴스에서 설정할 수 있는 값의 예입니다.

db.setProfilingLevel(0, { slowms: 20, sampleRate: 0.42 })

이 작업은 이전 설정 값이 포함된 문서를 반환합니다.

현재 프로파일링 수준을 보려면 db.getProfilingStatus()를 참조하세요.

다음은 mongod 인스턴스에서 설정할 수 있는 값의 예입니다.

  • 프로파일링 수준1로 설정합니다.

  • 필터: { op: "query", millis: { $gt: 2000 } }, 2초 이상 걸린 query 작업만 프로파일러가 기록하도록 제어

db.setProfilingLevel( 1, { filter: { op: "query", millis: { $gt: 2000 } } } )

이 작업은 이전 설정 값이 포함된 문서를 반환합니다.

현재 프로파일링 수준을 보려면 db.getProfilingStatus()를 참조하세요.

프로필 필터를 지우려면 filter: "unset" 옵션으로 db.setProfilingLevel()을 실행합니다.

db.setProfilingLevel( 1, { filter: "unset" } )

이 작업은 이전 설정 값이 포함된 문서를 반환합니다.

현재 프로파일링 수준을 보려면 db.getProfilingStatus()를 참조하세요.

돌아가기

db.setLogLevel