MongoDB 인스턴스의 CPU 문제에 대한 문제 해결 가이드

현재 MongoDB 인스턴스에 성능 병목 현상이 있는지 여부와 관련하여 현재 데이터베이스 관련 성능 지표에 대한 일반적인 이해를 얻으려면 다음 문서를 참조하십시오.이 문서에서는 최적화가 필요한 경우 취할 수있는 조치와 방법을 주로 설명합니다. 일부 SQL에 대한 MongoDB.

MongoDB监控之OS监控:https://blog.csdn.net/weixin_37692493/article/details/113757816
MongoDB监控之数据库监控:https://blog.csdn.net/weixin_37692493/article/details/113757888
MongoDB监控之慢日志:https://blog.csdn.net/weixin_37692493/article/details/113763366

1. 현재 세션을보고 느린 SQL을 가져옵니다.

발생하는 문제에 대해 현재 세션을보고 느린 문제 쿼리를 잡을 수 있습니다.

  • 모든 현재 세션을 직접 쿼리
db.currentOp()
  • 지정된 특정 조건을 기반으로 지정된 세션 정보 쿼리
db.currentOp(
   {
     "active" : true,
     "secs_running" : { "$gt" : 3 },
     "ns" : /^db1\./
   }
)
  • 초점
client          #请求是由哪个客户端发起
opid            #操作的opid,可以通过 db.killOp(opid) 直接杀掉会话
secs_running/microsecs_running
                #这个值重点关注,代表请求运行的时间,如果这个值特别大,就得注意了,看看请求是否合理
query/ns:       #这个能看出是对哪个集合正在执行什么操作
lock*:         #还有一些跟锁相关的参数

둘째, 느린 로그보기

과거에 발생한 과거 문제로 현장에 사이트가없는 경우 해당 문제 기간의 느린 로그를 조회하여 대략적인 문제 조회를 판단 할 수 있습니다.

  • 현재 느린 로그 매개 변수 상태보기
> db.getProfilingStatus()                   
{ "was" : 1, "slowms" : 100 }
  • 매개 변수를 동적으로 수정
> db.setProfilingLevel(1,10)                
{ "was" : 1, "slowms" : 100, "ok" : 1 }
> db.getProfilingStatus()
{ "was" : 1, "slowms" : 10 }
  • 최근 느린 로그 레코드 쿼리
> db.system.profile.find().sort({$natrual: -1}) 

MongoDB는 기본적으로 느린 로그 기능을 활성화하지 않습니다. 온라인 환경에서는이 매개 변수를 활성화하는 것이 좋습니다. 이 매개 변수는 데이터베이스에서 동적으로 켤 수 있습니다.

  • 주요 관심 사항 :

1) 전체 테이블 스캔 :

키워드 : COLLSACN, docsExamined
는 위의 키워드에주의를 기울이고 전체 테이블 스캔 쿼리 (또는 업데이트 / 삭제)를위한 합리적인 인덱스 설정을 최적화합니다.

2) 불합리한 문의

키워드 : IXSCAN, keysExamined
복합 인덱스의 경우 인덱스 생성 순서와 정렬 최적화에주의를 기울여야합니다.

3) 많은 양의 데이터 정렬

키워드 : 키워드 : SORT, hasSortStage

SQL이 많은 양의 데이터를 정렬해야하고 정렬을 인덱스별로 정렬 할 수없는 경우 MongoDB는 정렬을 위해 결과 집합을 메모리에 저장하므로 CPU 리소스가 많이 소모됩니다. 인덱스를 통해 결과 집합의 크기를 줄이거 나 인덱스를 사용하여 최적화를 위해 정렬하는 것을 고려할 수 있습니다.

세, 성능 평가 테스트

위의 문제가 해결되면 다른 최적화 공간이 없지만 데이터베이스로드가 여전히 높은 경우 업그레이드를 고려할 수 있습니다.

추천

출처blog.csdn.net/weixin_37692493/article/details/113763474