MongoDB 데이터베이스 인덱스 기반 구축 현황 전면 분석

앞 말
본 고 는 MongoDB 데이터베이스 색인 구축 현황 분석 을 상세 하 게 소개 할 것 이다.
개술
색인 을 만 들 면 색인 과 관련 된 조 회 를 가속 화 할 수 있 지만 디스크 공간의 소 모 를 증가 시 켜 기록 성능 을 떨 어 뜨 릴 수 있 습 니 다.현재 색인 구축 상황 이 합 리 적 인지 판단 해 야 한다.네 가지 방법 이 있어 요.
1.mongostat 도구
2,profile 집합 소개
3.일지
4.explain 분석
mongostat
mongostat 는 mongodb 가 자체 적 으로 가지 고 있 는 상태 검사 도구 로 명령 행 에서 사용 합 니 다.이것 은 고정 시간 간격 으로 mongodb 의 현재 운행 상 태 를 가 져 오고 출력 합 니 다.데이터베이스 가 갑자기 느 려 지 거나 다른 문제 가 있 는 것 을 발견 하면 먼저 mongostat 를 이용 하여 mongo 의 상 태 를 확인 하 는 것 을 고려 해 야 한다.
mongostat 는 mongodb 의 실행 상 태 를 보 는 프로그램 입 니 다.사용 방식 은 다음 과 같 습 니 다.
mongostat -h ip:port
[필드 설명]

insert/s :             ,   slave,     *,        
query/s :          
update/s :          
delete/s :          
getmore/s:     cursor(  )  getmore   
command:         ,            (   3|0),       |     
dirty:            
used:           
flushes:checkpoint              。    0,     1,       1       ,          flush  。flush      ,     flush,         
vsize:        ,  MB 
res:        ,  MB。 res      ,  res      ,               
qr:       MongoDB          
qw:      MongoDB           
ar:              
aw:             。  ar aw    ,    DB    ,DB           。             。        ,       ,       
netIn:MongoDB        
netOut:MongoDB        
conn:        , qr,qw,ar,aw   
time:    
【실례】
100000 개의 데 이 터 를 삽입 하고 mongostat 를 열 어 mongodb 운행 상 태 를 조회 합 니 다.

아래 그림 에서 보 듯 이 삽입 값 insert 값 은 데 이 터 를 삽입 할 때 대량으로 증가 하고 삽입 이 끝 난 후에 0 이 됩 니 다.flush 두 개 1 사이 의 간격 이 매우 길 다 는 것 은 성능 이 괜찮다 는 것 을 의미한다.res 가 천천히 상승 하고 갑 작 스 럽 게 떨 어 지 는 상황 이 나타 나 지 않 았 다 는 것 은 다른 프로그램 이 내용 을 대량으로 차지 하 는 상황 이 없다 는 것 을 의미한다.qrw 및 arw 데이터 가 매우 작 다 는 것 은 데이터베이스 읽 기와 쓰기 상태 가 정상 적 이 고 부하 가 적 다 는 것 을 의미한다.전체적으로 말 하면 mongodb 데이터베이스 운행 상태 가 양호 하 다.

profile
mongodb 는 profile 을 통 해 데 이 터 를 감시 하고 최적화 할 수 있 습 니 다.
【레벨】
우선,현재 프로필 기능 이 켜 졌 는 지 확인 해 야 합 니 다.
아래 명령 을 사용 하면 level 레벨 을 되 돌려 줍 니 다.값 은 0|1|2 입 니 다.0 은 닫 는 것 을 의미 합 니 다.즉,어떠한 조작 도 기록 하지 않 습 니 다.1.느 린 명령(기본 값 은 100 ms)을 기록 하 는 것 을 의미 합 니 다.즉,실행 시간 이 100 ms 를 초과 하 는 작업 을 기록 하 는 것 입 니 다.2.모든 것 을 대표 합 니 다.즉,모든 조작 을 기록 하 는 것 입 니 다.

db.getProfilingLevel() 
아래 명령 을 사용 하면 level 레벨 을 설정 할 수 있 습 니 다.

db.setProfilingLevel() 
아래 그림 에서 보 듯 이 기본적으로 프로필 이 닫 힙 니 다.setProfiling Level()방법 을 사용 하여 50ms 느 린 명령 으로 profile 을 엽 니 다.

【상태】
작업 이 system.profile 집합 에 기록 되 었 습 니 다.

db.system.profile.find()를 통 해 현재 모니터링 로 그 를 봅 니 다.


op:    
ns:    
query:     
responseLength:    
ts:  
mills:    
【사용】
시스템 에서 프로필 을 켜 면 프로필 에 기 록 된 데이터 가 매우 크 면 시스템 의 성능 이 현저히 떨어진다.따라서 profflee 의 사용 장면 은 일반적으로 새로운 시스템 이 출시 되 기 전의 테스트 단계 와 출시 되 었 을 때의 관찰 단계 로 데이터 뱅 크 의 디자인 과 응용 프로그램의 사용 이 정상 적 인지 확인한다.만약 profflee 가 대량의 필드 를 기록 했다 면 시스템 부착,색인 조정 등 을 조정 하여 크기 를 줄 여야 합 니 다.
로그
로그 파일 을 설정 할 때 verbose 매개 변 수 를 사용 하여 로그 의 상세 도 를 설정 할 수 있 습 니 다.매개 변 수 는'v'에서'vvvvv'까지 입 니 다.'v'가 많 을 수록 상세 도가 높 습 니 다.
로 그 는 연결 시간,현재 진행 중인 작업 등 몬 godb 의 실행 상 태 를 기록 합 니 다.

explain
MongoDB 는 시스템 이 조회 요청 을 어떻게 처리 하 는 지 알 수 있 도록 explain 명령 을 제공 했다.explain 명령 을 이용 하여 시스템 이 어떻게 색인 을 사용 하여 검색 을 가속 화 하 는 지 잘 관찰 할 수 있 으 며,동시에 맞 춤 형 최적화 색인 도 할 수 있다.
explain 은 세 가지 모델 이 있 는데 그것 이 바로 query Planner,execution Stats,allPlansExecution 이다.현실 개발 에서 자주 사용 되 는 것 은 execution Stats 모델 이다.
우선 10 만 개의 데 이 터 를 삽입 합 니 다.

time 필드 에 색인 만 들 기

이 어 타임 범위 가 100 과 200 사이 인 문 서 를 찾 아 explain()을 사용한다.
결 과 는 query Planner,execution Stats,server Info 세 부분 으로 나 뉜 다.이어서 이 세 부분의 결 과 를 상세 하 게 분석 할 것 이다.
【queryPlanner】

queryPlanner.planner 버 전:버 전
query Planner.namespace:조회 표
query Planner.index FilterSet:이 query 에 index filter 가 있 는 지 여부
query Planner.parsedQuery:검색 조건
query Planner.winning Plan:이 query 가 돌아 오 는 최 적 화 된 실행 계획 에 대한 자세 한 내용 을 조회 합 니 다.
query Planner.winning Plan.stage:계획 을 가장 잘 수행 하 는 stage
query Planner.winning Plan.inputStage:하위 stage 를 설명 하고 부모 stage 에 문서 와 색인 키 워드 를 제공 합 니 다.
query Planner.winning Plan.inputstage.stage,여기 IXSCAN 입 니 다.index scanning 을 진행 하고 있 음 을 표시 합 니 다.
query Planner.winning Plan.inputstage.key Pattern:색인 키 쌍
queryPlanner.winningPlan.inputstage.indexName:색인 이름
query Planner.winning Plan.inputstage.is Multikey:Multikey 인지 여 기 는 false 로 되 돌아 갑 니 다.색인 이 array 에 세 워 지면 여 기 는 true 입 니 다.
query Planner.winning Plan.inputstage.direction:조회 순서,여 기 는 forward 입 니 다.sort({time:-1})를 사용 하면 backward 가 표 시 됩 니 다.
query Planner.winning Plan.inputstage.indexBounds:검색 한 색인 범위
query Planner.rejected Plans:기타 실행 계획
【executionStats】

executionStats.executionSuccess:성공 여부
executionStats.nReturned:항목 개 수 를 되 돌려 줍 니 다.
executionStats.totalKeys Examined:색인 검색 항목 개수
executionStats.totalDocsExamined:문서 스 캔 항목 갯 수
executionStats.executionStages.stage:스 캔 형식
executionStats.executionTimeMillis:전체 조회 시간
executionStats.executionStages.executionTimeMillisEstimate:색인 검색 문서 에 따라 데 이 터 를 얻 는 시간
executionStats.executionStages.inputStage.executionTimeMillisEstimate:색인 검색 에 사용 되 는 시간
【serverInfo】

server.Info.host:호스트 이름
server.Info.port:포트
server.Info.version:버 전
server.Info.git 버 전:git 버 전
[성능 분석]
1.실행 시간
execution TimeMillis 값 이 작 을 수록 좋 습 니 다.
2.항목 수
가장 이상 적 인 상 태 는:nReturned=totalKeysExamined=totalDocsExamined
3.stage 유형
stage 의 유형 은 다음 과 같다.

COLLSCAN:    
IXSCAN:    
FETCH:         document
SHARD_MERGE:           merge
SORT:           
LIMIT:  limit     
SKIP:  skip    
IDHACK:  _id    
SHARDING_FILTER:  mongos         
COUNT:  db.coll.explain().count()    count  
COUNTSCAN:count   Index  count  stage  
COUNT_SCAN:count   Index  count  stage  
SUBPLA:       $or   stage  
TEXT:             stage  
PROJECTION:        stage   
다음 스테이지 가 포함 되 어 있 는 것 을 보고 싶 지 않 습 니 다:

COLLSCAN(    )
SORT(  sort   index)
    SKIP
SUBPLA(   index $or)
COUNTSCAN(   index  count)
이상 의 MongoDB 데이터베이스 색인 구축 현황 을 바탕 으로 전면적으로 분석 한 것 은 바로 편집장 이 여러분 에 게 공유 한 모든 내용 입 니 다.여러분 께 참고 가 되 고 저 희 를 많이 사랑 해 주시 기 바 랍 니 다.

좋은 웹페이지 즐겨찾기