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 데이터베이스 색인 구축 현황 을 바탕 으로 전면적으로 분석 한 것 은 바로 편집장 이 여러분 에 게 공유 한 모든 내용 입 니 다.여러분 께 참고 가 되 고 저 희 를 많이 사랑 해 주시 기 바 랍 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
레코드를 업데이트하고 업데이트 전에 동일한 레코드를 삭제하는 방법(nest js & mongoDB)ID로 레코드를 업데이트하고 싶지만 업데이트 전에 동일한 레코드에 이전에 저장된 데이터를 삭제하고 싶습니다. 프로세스는 무엇입니까? 컨트롤러.ts 서비스.ts 나는 이것을 해결하기 위해 이런 식으로 노력하고 있습니다...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.