문서 홈 → 애플리케이션 개발 → MongoDB 매뉴얼
MongoDB 4.4 릴리스 노트
이 페이지의 내용
경고
패치 릴리스
4.4.29 - 2024년 2월 28일
중요
MongoDB Server가 신뢰할 수 없는 연결에 성공할 수 있는 문제를 수정했습니다.
4.4.29 이전의 MongoDB 4.4에서 CVE-2024-1351로 인해, --tlsCAFile
및 CAFile
의 특정 구성에서는 MongoDB Server가 Peering 인증서 유효성 검사를 건너뛰어 신뢰할 수 없는 연결이 성공할 수 있습니다.
이렇게 하면 인증서 유효성 검사 실패로 인해 닫혔어야 하는 연결 및 TLS에서 제공하는 보안 보장을 효과적으로 줄일 수 있습니다. 이 문제는 다음 MongoDB Server 버전에 영향을 미칩니다.
7.0.0 - 7.0.5
6.0.0 - 6.0.13
5.0.0 - 5.0.24
4.4.0 - 4.4.28
CVSS 점수: 8.8
CWE: CWE-295: 부적절한 인증서 유효성 검사
4.4.28 - 1월 18, 2024
4.4.27 - 1월 3, 2024
서버-63865 비정상 종료 후 독립형 시작 복구 중 누락된 인덱스 ID 처리
서버- 수신자 샤드는81106 복제 단계를 시작하기 전에 컬렉션 버전이 로컬로 유지될 때까지 기다리지 않습니다.
서버-81878 startupRecoveryForRestore가 시작 복구 중에 컬렉션 삭제를 적용하면 제대로 재생되지 않을 수 있습니다.
서버-82325 밸런서 라운드 중에 구성 서버가 변경되지 않을 수 있음
WT-11564 체크포인트에 있는 경우에만 최신 트랜잭션 값을 읽도록 RTS 수정
4.4.26 - 11월 27, 2023
수정된 문제:
서버-50792 shardCollection 또는 refineCollectionShardKey에 대한 샤드 키 인덱스를 찾을 수 없는 경우 더 유용한 오류를 반환합니다.
서버-80021 더블과 문자열 간에 $convert를 올바르게 왕복하도록 합니다.
서버- 수신자 샤드는81106 복제 단계를 시작하기 전에 컬렉션 버전이 로컬로 유지될 때까지 기다리지 않습니다.
서버-81966 새로 고침 중 이전 청크맵 인스턴스 수정 방지
WT-10424 cursor::search_near 삭제된 항목이 많은 경우 성능이 저하됩니다.
4.4.25 - 9월 29, 2023
수정된 문제:
서버-76299 세컨더리 서버의 serverStatus 내 writeConflicts 보고
서버-78828 정렬 중에 LDAP 호스트 타이밍 데이터가 일관되지 않을 수 있습니다.
WT-11031 체크포인트에서 시간 창 정보가 없는 테이블을 건너뛰도록 RTS 수정
서버- 밸런서는70973 사용 가능한 샤드가 더 이상 없을 때 컬렉션 반복을 중지해야 합니다.
서버-71627 캐시된 컬렉션 경로 정보를 새로 고침하면 클러스터에 1 청크가 백만 개 있는 경우 모든 클라이언트 요청이 심각하게 차단됩니다.
서버-78813 lastCommitted optime이 null인 배출 커서로 커밋 지점 전파가 무기한 실패합니다.
WT-8570 복구 중에 가장 오래된 ID를 늘리지 않음
WT-10449 기록 저장소에 기록할 업데이트가 없는 경우 업데이트 체인을 저장하지 마세요.
4.4.24 - 8월 23, 2023
수정된 문제:
4.4.23 - 7월 13, 2023
4.4.22 - 5월 18, 2023
4.4.21 - 4월 27, 2023
수정된 문제:
4.4.20 - 4월 10, 2023
수정된 문제:
4.4.19 - 2월 27, 2023
경고
기존 MongoDB 인스턴스를 MongoDB 4.4.19로 업그레이드할 때 mongod.conf
파일에 fork: true
이 설정되어 있으면 해당 인스턴스가 시작되지 않을 수 있습니다.
업그레이드 문제는 .deb
또는 설치 패키지를 사용하는 모든 MongoDB .rpm
인스턴스에 영향을 미칩니다. tarball(.tgz
) 릴리스 또는 기타 패키지 유형을 사용하는 설치는 영향을 받지 않습니다. 자세한 내용은 SERVER-74345 를 참조하세요.
fork: true
설정을 제거하려면 시스템 터미널에서 다음 명령을 실행합니다.
systemctl stop mongod.service sed -i.bak '/fork: true/d' /etc/mongod.conf systemctl start mongod.service
두 번째 systemctl
명령은 설정이 제거된 후 업그레이드된 인스턴스를 시작합니다.
수정된 문제:
서버-68122 초기 동기화 중 컬렉션 WiredTiger 구성 문자열 복제 조사
서버-71759 dataSize 명령이 양보하지 않습니다.
서버-72222 분할된 클러스터에서 결과를 병합할 때 단일 축소 최적화를 사용한 MapReduce가 실패합니다.
서버-72535 샤드 클러스터를 사용하면 대체 대소문자를 사용하여 'admin', 'local', 'config' 데이터베이스를 생성할 수 있습니다.
서버-70235 42v4 시 범위 삭제 문서를 생성하지 않습니다. -v .4 컬렉션 uuid 불일치 시 업그레이드
WT-9599 차단 관리자에서 fallocate를 호출하기 위해 핫 백업 잠금을 획득합니다.
4.4.18 - 11월 21, 2022
수정된 문제:
서버-66289 $out이 v 에서 BSONObj 크기 오류를 잘못5 0발생시킵니다. .8
서버-61185 고유 인덱스 조회를 위해 prefix_search 사용
서버-68115 "elemMatchRootLength > 0" 불변 트리거에 대한 버그 수정
서버- 중복 키 오류 시 'keyValue'필드를 드라이버로 전송하지 않습니다.50454
서버-69443 [4.4] --enableMajorityReadConcern=false일 때 다중 문서 txns에서 추측성 다수 읽기를 허용합니다.
4.4.17 - 9월 28, 2022
수정된 문제:
서버-68925 시작 시 검사 테이블 로깅 설정 다시 도입(SERVER-43664 되돌리기)
서버-56127 청크가 마이그레이션되고 샤드 키 패턴이 중첩 필드를 사용하는 경우 재시도 가능 업데이트가 두 번 이상 실행될 수 있습니다.
서버-64142 RefineCollectionShardKey 명령에 새로운 enforceUniqueness 추가
서버-65382 AutoSplitVector는 clientReadable을 사용하여 샤드 키 필드를 재정렬해서는 안 됩니다.
서버-61275 세션 캐시가 종료된 후 크기 저장소를 폐기합니다.
WT-9870 복구 중에 가장 오래된 타임스탬프가 업데이트될 때마다 고정된 타임스탬프가 업데이트되는 문제를 수정합니다.
4.4.16 - 8월 19, 2022
수정된 문제:
4.4.15 - 6월 21, 2022
수정된 문제:
서버-66433 겹치는 범위 삭제가 pre-v 까지 완료될 때까지 기다리는 백포트 기한입니다. 버전51
서버-65821 커밋/중단 결정을 유지하지 않은 준비된 트랜잭션이 있는 경우 setFCV 중 교착 상태
서버-65131 기회주의적 읽기 타겟팅 비활성화(헤지된 읽기(hedged read) 제외)
서버-62272 컬렉션에 스키마 유효성 검사를 추가하면 실패한 문서의 청크 마이그레이션을 방지할 수 있습니다.
서버- 네트워킹 호출을 차단하면 동기화 소스 확인이 무기한 지연될 수있습니다.54900
4.4.14 - 5월 9, 2022
수정된 문제:
서버-64983 TransactionParticipant::_resetTransactionState에서 WT 트랜잭션을 롤백하기 전에 클라이언트 잠금을 해제합니다.
서버-62229 recoverFromOplogAsStandalone=true일 때 인덱스 빌드 항목을 적용할 때 발생하는 불변성 수정
서버-60412 호스트 메모리 제한 검사에서 cgroup v 를 준수하지 않습니다.2
서버-55429 수신자가 겹치는 범위를 정리하지 않을 때 마이그레이션을 더 일찍 중단합니다.
WT-8924 행 저장소에서 충돌을 확인할 때 삽입 목록이 있는 경우 디스크 시간 창을 확인하지 않습니다.
4.4.13 - 3월 7, 2022
수정된 문제:
4.4.12 - 1월 21, 2022
수정된 문제:
4.4.11 - 12월 30, 2021
수정된 문제:
WT-8395 443 444 에서 업그레이드한 후 데이터가 일치하지 않습니다. . 및 . . ~ 4.4.8+ 및 5.0.2+
서버-60326 X 인증서에509 주체 이름이 비어 있으면 Windows Server가 시작되지 않습니다.
서버-60310 OCSP 응답 유효성 검사는 관련 없는 인증서의 상태를 고려하지 않아야 합니다.
서버-59226 중단 불가능으로 표시된 프로필 세션으로 단계적으로 종료할 때 교착 상태
서버-56226 [v4.4] 청크 마이그레이션이 커밋되지 않도록 config.collections 항목에 'permitMigrations' 필드를 도입합니다.
서버-51329 mongos 서버를 종료할 때 예기치 않은 재시도 불가 오류 발생
서버-45953 oplog 독자가 읽기 티켓을 획득하지 못하도록 면제
4.4.10 - 10월 15, 2021
수정된 문제:
4.4.9 - 9월 21, 2021
수정된 문제:
4.4.8 - 8월 4, 2021
수정된 문제:
서버-58936: 고유 인덱스 제약 조건이 적용되지 않을 수 있습니다.
서버-58258: 'replSetGetStatus' 회신에 'initialSync' 필드가 없다고 어설션하기 전에 초기 동기화가 상태를 지울 때까지 기다립니다.
서버-52906: 마이그레이션 실패 후 복제 인덱스를 롤백한 moveChunk가 샤드 키 인덱스 누락으로 인해 무기한 중단될 수 있음
WT-7837: 어설트 실행을 방지하기 위해 wt_hs_insert_updates에서 업데이트 구조 지우기
WT-6729: 스테이블의 활성 트랜잭션 검사로 롤백을 실행하기 전에 제거 중지
4.4.7 - 7월 16, 2021
수정된 문제:
4.4.6 - 5월 10, 2021
수정된 문제:
4.4.5 - 4월 8, 2021
수정된 문제:
서버-55298: BSONObjectTooLarge 오류 재현 및 조사
서버- : "opCtx != nullptr && _opCtx == nullptr"불변성을 조사하고 재현합니다.53566
서버-51281: mongod 라이브 잠금
서버-46686: Explain이 maxTimeMS를 준수하지 않습니다.
서버-45836: 기본 로그 수준에서 더 많은 LDAP 세부 정보(예: 서버 IP)를 제공합니다.
4.4.4 - 2월 16, 2021
수정된 문제:
서버-48471: 해시된 인덱스는 멀티키로 잘못 표시되어 샤드 키로 사용할 수 없게 될 수 있습니다.
서버-50769: 서버가 expr{"expr":"_currentApplyOps.getArrayLength() > 0","file":"src/mongo/db/pipeline/document_source_change_stream_transform.cpp","line": 후 다시 시작되었습니다. }535}}
서버-52919: 초기 동기화에 와이어 압축이 활성화되지 않음
WT-7109: 이전 버전과의 호환성을 위해 더 이상 지원되지 않는 구성 옵션을 유지합니다.
WT-7117: 업데이트를 복원하는 동안 온디스크 기본 업데이트보다 최신인 수정 사항을 건너뛰는 RTS
4.4.3 - 1월 4, 2021
수정된 문제:
4.4.2 - 11월 18, 2020
수정된 문제:
서버-48067: 고유하지 않은 키가 많은 고유 인덱스 빌드의 메모리 소비를 줄입니다.
서버-48523: 변경 스트림을 재개하려고 할 때 무조건 oplog의 첫 번째 항목을 확인합니다.
서버-50365: 시간 초과할 수 없는 장기 실행 트랜잭션이 멈춥니다.
서버-50394: mongod 감사 로그는 샤드 환경에서 __system 사용자에게 DDL 작업의 속성을 부여합니다.
서버-51041: 세컨더리 읽기에 대한 시작 트랜잭션 제한
서버-51120: MERGE_SORT를 사용하는 쿼리 찾기에서 데이터 정렬이 지정된 경우 결과가 잘못 정렬됩니다.
4.4.1 - 9월 9, 2020
수정된 문제:
서버-48531: 3 방식으로 청크 스플리터, 준비된 트랜잭션 및 스텝다운 스레드 간에 교착 상태가 발생할 수 있습니다.
서버-48641: 체크아웃된 세션의 쓰기 고려를 기다리는 MigrationDestinationManager로 인한 교착 상태
서버-49546: setFCV를 4 4 로 설정합니다. 는 범위 삭제 작업을 한 번에 하나씩 삽입하지 않고 배치로 삽입해야 합니다.
서버-49694: 샤드 클러스터에서는 가장 가까운 읽기 또는 헤지된 읽기(hedged read)가 니어 샤드 복제본으로 라우팅되지 않을 수 있습니다.
서버-50137: MongoDB가 에서 생성된 oplog 항목으로 인해 불변성 실패와 3 함께 충돌합니다.4
서버-50140: 초기 동기화는 동기화 소스의 부정확한 재시작을 견딜 수 없습니다.
서버-50170: mongos에서 서버 선택 실패 수정
WT-6623: 복구 파일 스캔에서 연결 수준 파일 ID를 설정합니다.
풀타임 진단 데이터 캡처 요구 사항
버전 부터 시작됩니다.4 4 mongod
mongos
, 또는 의 FTDC(Full Time Diagnostic Data Capture) 스레드가 mongod
mongos
diagnostic.data
storage.dbPath
실패하면 원래 프로세스를 종료합니다. 가장 일반적인 오류를 방지하려면 / 를 실행하는 사용자에게 ( 의 mongod
경우) 또는 와 systemLog.path
병렬( 의 경우) 내에 FTDC 디렉토리를 만들 수 있는 권한이 있는지 확인하세요 mongos
).
집계
모두 통합($unionWith
단계)
MongoDB 4.4 은(는) $unionWith
애그리게이션 단계를 추가하여 여러 컬렉션의 파이프라인 결과를 단일 결과 세트로 결합하는 기능을 제공합니다.
자세한 내용은 $unionWith
를 참조하세요.
사용자 지정 집계 표현식
버전 4 부터 시작됩니다.4, MongoDB는 사용자가 사용자 지정 애그리게이션 표현식을 정의할 수 있는 다음과 같은 새로운 연산자를 제공합니다.
이러한 새로운 연산자가 추가되면 mapReduce
및 $where
에 의존하는 대신 애그리게이션을 사용하여 사용자 지정 JavaScript 표현식을 작성할 수 있습니다.
참고
버전 4.4 이전에도 사용자 지정 함수 없이 $group
$merge
등과 같은 다른 집계 파이프라인 연산자 를 사용하여 다양한 맵 리듀스 표현식을 다시 작성할 수도 있습니다.
자세한 내용은 맵-리듀스에서 집계 파이프라인으로의 전환을 참조하세요.
새로운 집계 연산자
연산자 | 설명 |
---|---|
사용자 정의 축적자 연산자의 결과를 반환합니다. | |
지정된 문자열 또는 바이너리 데이터 값의 콘텐츠 크기를 바이트 단위로 반환합니다. | |
지정된 문서의 크기를 바이트 단위로 반환합니다(예: bsontype Object ). 단, BSON으로 인코딩된 경우. | |
배열의 첫 번째 요소를 반환합니다. | |
사용자 지정 애그리게이션 표현식을 정의합니다. | |
지정된 표현식이 표현식이 다른 BSON types, | |
배열의 마지막 요소를 반환합니다. | |
지정된 입력에서 일치하는 문자열의 첫 번째 인스턴스를 바꿉니다. | |
주어진 입력에서 일치하는 문자열의 모든 인스턴스를 대체합니다. |
일반 집계 개선 사항
$out
MongoDB 4.4부터 시작됩니다:
$indexStats
MongoDB 4 부터 시작.4 ( 4.2.4 부터 사용 가능), $indexStats
출력에 다음 필드가 포함됩니다.
$merge
MongoDB 4.4부터 시작됩니다:
$merge
는 다른 데이터베이스의 컬렉션으로 출력할 수 있습니다. 이전 버전에서는$merge
가 애그리게이션이 실행되는 동일한 데이터베이스의 컬렉션으로만 출력할 수 있습니다.$merge
는 클러스터의 모든 노드에 featureCompatibilityVersion 이4.4
이상으로 설정되어 있고 읽기 설정 이 세컨더리 읽기를 허용하는 경우에만 복제본 세트 세컨더리 노드에서 실행할 수 있습니다.드라이버 설명서에서 드라이버가 언제 지원을 추가했는지 확인하세요.
$merge
는 집계 중인 collection과 동일한 collection으로 출력할 수 있습니다. $lookup
와 같이 파이프라인의 다른 단계에 나타나는 collection으로 출력할 수도 있습니다.
경고
$merge
집계 중인 동일한 컬렉션에 출력이 발생하면 문서가 여러 번 업데이트되거나 작업이 무한 루프가 발생할 수 있습니다. 이 동작은 에서 수행한 업데이트로 인해 $merge
디스크에 저장된 문서의 물리적 위치가 변경될 때 발생합니다. 문서의 물리적 위치가 변경되면$merge
에서 문서를 완전히 새로운 문서로 간주하여 추가 업데이트를 수행할 수 있습니다. 이 동작에 대한 자세한 내용은 ' 할로윈 문제'를 참조하세요.
$planCacheStats
변경 사항
버전 4 부터 시작됩니다.4,
$planCacheStats
단계는mongos
인스턴스 및mongod
인스턴스에서 실행할 수 있습니다. 4 에서 .2,$planCacheStats
단계는mongod
인스턴스에서만 실행할 수 있습니다.$planCacheStats
에는 호스트 필드와mongos
에 대해 실행되는 경우 샤드 필드라는 새로운 필드가 포함됩니다.mongo
shell은PlanCache.list()
메서드를$planCacheStats
애그리게이션 단계의 래퍼로 제공합니다.MongoDB는 다음을 제거합니다.
planCacheListPlans
및planCacheListQueryShapes
명령PlanCache.getPlansByQuery()
및PlanCache.listQueryShapes()
메서드가 포함됩니다.
대신
$planCacheStats
또는PlanCache.list()
를 사용합니다.
$collStats
변경 사항
MongoDB 4 부터 시작.4, $collStats
는 queryExecStats
필드를 인수 문서로 허용합니다. 이 필드를 제공하면 출력에 다음 필드가 반환됩니다.
collectionScans
필드에는 다음 필드가 포함된 내장된 문서가 포함되어 있습니다.
필드 이름 | 설명 |
---|---|
total | collection 스캔을 수행한 총 쿼리 수를 제공하는 64비트 정수입니다. 이 총합은 테일 커서( tailable cursor)를 사용한 쿼리와 사용하지 않은 쿼리로 구성됩니다. |
nonTailable |
explain
변경 사항
MongoDB 부터 4 4 db.collection.explain().aggregate()
executionStats
allPlansExecution
executionTimeMillisEstimate
시작. , 및 모드에서 메서드를 실행하면 설명 출력 에 나열된 각 파이프라인 단계 에 및 nReturned
가 포함됩니다.
복제본 세트
재개 가능한 초기 동기화
MongoDB 4.4부터는 초기 동기화를 수행하는 보조가 일시적 (즉, 다음과 같은) 이유로 동기화 프로세스가 중단된 경우 동기화 프로세스를 재개하려고 시도할 수 있습니다. 임시) 네트워크 오류, 컬렉션 삭제 또는 컬렉션 이름 변경 등이 있습니다. 또한 동기화 원본은 다시 시작 가능한 초기 동기화를 지원하기 위해 MongoDB 4.4를 실행해야 합니다. 동기화 소스가 MongoDB 4.2 이하 버전을 실행하는 경우, 보조 소스는 일시적이지 않은 네트워크 오류가 발생한 것처럼 초기 동기화 프로세스를 다시 시작해야 합니다.
기본적으로 보조 동기화는 24시간 동안 초기 동기화를 다시 시도합니다. MongoDB 4.4는 보조 서버가 초기 동기화를 재개하려고 시도하는 시간을 제어하기 위해 initialSyncTransientErrorRetryPeriodSeconds
서버 매개변수를 추가했습니다. 보조 서버가 구성된 기간 동안 초기 동기화 프로세스를 성공적으로 재개할 수 없는 경우 복제 세트에서 새로운 정상 소스를 선택하고 초기 동기화 프로세스를 처음부터 다시 시작합니다.
MongoDB 4 이전 버전.4, 세컨더리는 프로세스 중에 오류가 발생하면 전체 초기 동기화를 다시 시작합니다.
스트리밍 복제
MongoDB 4 부터 시작.4, 소스 에서 동기화 하면 동기화 중인 세컨더리로 oplog 항목의 지속적인 스트림을 보냅니다.
44 MongoDB 4 4 이전 버전. , 세컨더리 가 소스에서 동기화 요청을 보내고 응답을 기다리는 방식으로 oplog 항목 배치를 oplogFetcherUsesExhaust
가져왔습니다. 이를 위해서는 각 배치의 oplog 항목에 대해 네트워크 왕복이 필요했습니다. MongoDB . 는 스트리밍 복제를 비활성화하고 이전 복제 동작을 사용하기 위한 시작 매개 변수를 추가합니다.
자세한 내용은 스트리밍 복제를 참조하세요.
디렉토리 롤백
Mongo 4 부터 시작.4, 컬렉션의 롤백 디렉토리 이름은 컬렉션 네임스페이스가 아닌 컬렉션의 UUID를 따라 지정됩니다. 예:
<dbpath>/rollback/20f74796-d5ea-42f5-8c95-f79b39bad190/removed.2020-02-19T04-57-11.0.bson
자세한 내용은 데이터 롤백을 참조하세요.
최소 Oplog 보존 기간
다음 기준이 두 가지 모두 충족되는 경우 에만 가 oplog 항목을 제거하는 oplog 항목을 보존할 최소 시간을 지정할 수 있습니다.mongod
oplog가 구성된 최대 크기에 도달했습니다.
oplog 항목이 호스트 시스템 시계를 기준으로 구성된 시간보다 오래된 경우
기본적으로 MongoDB는 최소 oplog 보존 기간을 설정하지 않으며, 설정된 최대 oplog 크기를 유지하기 위해 가장 오래된 항목부터 자동으로 oplog를 잘라냅니다.
mongod
시작 시 최소 oplog 보존 기간을 구성하려면 다음 중 하나를 수행하십시오.
storage.oplogMinRetentionHours
mongod
2} 설정을 구성 파일에 추가합니다.-또는-
--oplogMinRetentionHours
명령줄 옵션을 추가합니다.
실행 중인 mongod
의 최소 oplog 보존 기간을 구성하려면 replSetResizeOplog
를 사용하십시오. mongod
실행 시 최소 oplog 보존 기간을 설정하면 시작 시 설정된 모든 값이 재정의됩니다. 서버를 다시 시작해도 변경 사항을 유지하려면 해당 구성 파일 설정 또는 명령줄 옵션의 값을 업데이트해야 합니다.
중요
oplog는 구성된 시간 동안 oplog 항목을 유지하기 위해 제한 없이 늘릴 수 있습니다. 하지만 이로 인해 쓰기의 양이 많아지고 보유 기간이 늘어나며 시스템 디스크 공간이 줄어들거나 고갈될 수 있습니다.
팁
다음도 참조하세요.
slowOpSampleRate
세컨더리 로그에 영향을 미칩니다.
MongoDB 4 부터 시작.4, 복제본 세트 세컨더리의 느린 oplog 애플리케이션 로그는 slowOpSampleRate
의 영향을 받습니다. 이전 버전에서는 MongoDB가 샘플 속도에 관계없이 모든 느린 oplog 항목을 기록했습니다.
slowOpSampleRate
프로파일링하거나 기록해야 하는 느린 작업의 비율을 지정합니다.
인덱스는 데이터를 보유하는 복제본 세트 멤버에서 동시에 빌드됩니다.
참고
인덱스는 데이터를 보유한 모든 복제본 세트 멤버에서 동시에 복제본 세트 또는 샤드 cluster 빌드를 기반으로 합니다. 샤드 cluster의 경우 인덱스 빌드는 인덱싱되는 collection에 대한 데이터가 포함된 샤드에서만 발생합니다. 프라이머리에는 인덱스를 사용할 준비가 된 것으로 표시하기 전에 빌드를 완료해야 하는 자신을 포함한 최소한의 데이터 보유 voting
멤버(즉, 쿼럼 커밋)가 필요합니다.
기본적으로 인덱스 빌드는 데이터를 보유한 모든 투표 멤버의 쿼럼 커밋을 사용합니다. 기본이 아닌 쿼럼 커밋을 사용하여 인덱스 빌드를 시작하려면 MongoDB 4 을(를) 사용합니다.4 은 commitQuorum 매개 변수를 createIndexes
또는 해당 셸 헬퍼 db.collection.createIndex()
및 db.collection.createIndexes()
에 추가합니다.
진행 중인 인덱스 빌드에 필요한 쿼럼을 수정하려면 MongoDB 4 을(를) 수정합니다.4 에는 새로운 setIndexCommitQuorum
명령이 도입되었습니다.
자세한 내용 은 복제된 환경에서의 인덱스 빌드를 참조하세요.
복제본 세트 재구성 변경 사항
변경 사항: replSetReconfig
MongoDB 부터 4 4시작. , 명령은 투표 멤버의 과반수가 복제본 구성을 replSetReconfig
설치할 때까지 기다렸다가 성공을 반환합니다. 투표 멤버는 members[n].votes
1
중재자를 포함하여 이 인 모든 복제본 멤버입니다. 먼저, 작업은 프라이머리에 새 구성을 설치하기 전에 현재 구성이 커밋될 때까지 기다립니다. 그런 다음 작업은 투표 멤버의 과반수가 새 구성을 설치할 때까지 기다렸다가 성공적으로 반환합니다. 자세한 내용은 재구성이 과반수 구성원이 복제본 구성을 설치할 때까지 대기 항목을 참조하세요.
replSetReconfig
는 기본적으로 투표 멤버의 과반수가 구성을 설치할 때까지 무기한 기다립니다. MongoDB 4. 또한 4 는 작업이 성공적으로 반환될 때까지 대기할 최대 시간을 지정하기 위해 선택적 maxTimeMS 매개 변수를 replSetReconfig
에 추가합니다.
MongoDB 4 부터 시작.4, replSetReconfig
명령을 사용하면 한 번에 1
개 이하의 voting
멤버를 추가하거나 제거할 수 있습니다. 여러 투표 멤버를 추가하거나 제거하려면 replSetReconfig
또는 rs.reconfig()
연산을 실행하여 한 번에 한 명의 멤버를 추가하거나 제거합니다. 자세한 내용은 재구성 시 한 번에 투표 멤버 둘 이상을 추가 또는 제거할 수 없음에서 확인하세요.
변경 사항: replSetGetConfig
replSetGetConfig
명령은 프라이머리에서 실행할 때 새 옵션 commitStatus: true 를 지정할 수 있습니다. 이 옵션과 함께 실행하면 명령은 출력에 commitStatus 필드를 포함합니다. 이 출력 필드는 복제본 세트를 다시 재구성할 수 있도록 복제본 세트의 이전 재구성이 커밋되었는지 여부를 나타냅니다. 자세한 내용은 replSetGetConfig 명령을 참조하세요.
복제본 구성 문서 변경 사항
MongoDB 4. 이(가)4 복제본 세트 구성 문서 term
에 필드를 추가합니다. 복제본 세트 멤버는 term
및 를 사용하여 version
'최신' 복제본 구성에 대한 합의를 도출합니다.featureCompatibilityVersion (fCV) : "4.4" 를 수행하여 replSetReconfig
term
구성 문서에 필드를 추가하고 새 구성이 대다수의 복제본 세트 멤버에게 전파될 때까지 차단합니다. 마찬가지로 로 fCV : "4.2"
다운그레이드하면 암시적으로 재구성을 수행하여 term
필드를 제거합니다.
기본 설정 초기 동기화 소스
MongoDB 4 부터 시작.4, initialSyncSourceReadPreference
매개변수를 사용하여 선호하는 초기 동기화 소스를 지정할 수 있습니다. 이 매개변수는 mongod
시작 시에만 setParameter
구성 파일 설정 또는 --setParameter
명령줄 옵션을 사용하여 설정할 수 있습니다.
initialSyncSourceReadPreference
다음 읽기 설정 모드를 지원합니다.
primaryPreferred
(투표를 하는 복제본 세트 멤버에 대한 기본값)nearest
(새로 추가되거나 투표권이 없는 복제본 집합 구성원의 기본값)
복제본 세트가 chaining
비활성화된 경우 기본 initialSyncSourceReadPreference
읽기 설정 모드는 primary
입니다.
태그 세트 또는 maxStalenessSeconds
을(를) initialSyncSourceReadPreference
으)로 지정할 수 없습니다.
팁
다음도 참조하세요.
미러링된 읽기
버전 4.4부터 MongoDB는 선택 가능한 보조 멤버의 캐시를 가장 최근에 액세스한 데이터로 사전 워밍하기 위해 미러링된 읽기를 제공합니다. 미러링된 읽기를 사용하면 프라이머리는 수신한 오퍼레이션의 하위 집합을 미러링하여 선택 가능한 보조 노드의 하위 집합으로 전송할 수 있습니다. 보조 캐시를 미리 준비하면 선택 후 성능을 더 빠르게 복원하는 데 도움이 될 수 있습니다.
참고
클라이언트에 대한 프라이머리의 응답은 미러 읽기의 영향을 받지 않습니다. 미러링된 읽기는 프라이머리의 '파이어 앤 포겟(fire-and-forget)' 작업입니다. 즉, 프라이머리는 미러링된 읽기에 대한 응답을 기다리지 않습니다.
미러링된 읽기 매개변수
MongoDB 4.4 은 다음과 같은 미러링된 읽기 매개변수를 추가합니다. 시작 시 setParameter
구성 파일 설정 또는 --setParameter
명령줄 옵션을 사용하거나 런타임에 setParameter
명령을 사용하여 매개 변수를 설정할 수 있습니다.
매개변수 | 설명 |
---|---|
미러링된 읽기에 대한
|
미러링된 읽기 메트릭
작업에 필드를 포함하도록 지정한 경우 serverStatus
명령과 해당 mongo
shell 메서드 db.serverStatus()
는 mirroredReads
을 반환합니다.
db.runCommand( { serverStatus: 1, mirroredReads: 1 } )
또는
db.serverStatus( { mirroredReads: 1 } )
샤드 클러스터
리파인어블 샤드 키
4 부터 시작됩니다.4, MongoDB는 refineCollectionShardKey
명령을 제공합니다. 새 명령을 사용하면 기존 키에 접미사 필드를 하나 이상 추가하여 컬렉션의 샤드 키를 구체화할 수 있습니다. 컬렉션의 샤드 키를 수정하면 데이터를 더욱 세분화할 수 있으며 기존 키의 카디널리티가 충분하지 않아 점보(즉, 분할할 수 없는) 청크 가 생성되는 상황을 해결할 수 있습니다.
예를 들어, 샤드 키가 { customer_id: 1 }
인 기존 orders
컬렉션이 있을 수 있습니다. 샤드 키에 접미사 order_id
필드를 추가하여 {
customer_id: 1, order_id: 1 }
이 새 샤드 키가 되도록 샤드 키를 변경할 수 있으며, 이를 통해 customer_id
및 order_id
필드를 모두 기준으로 데이터를 배포할 수 있습니다.
refineCollectionShardKey
명령을 사용하려면 샤드 클러스터의 기능 호환성 버전(fcv) 이 4.4
이어야 합니다. 자세한 내용은 refineCollectionShardKey
명령을 참조하세요.
참고
샤드 키를 세분화한 후에는 컬렉션의 모든 문서에 접미사 필드가 없을 수 있습니다. 누락된 샤드 키 필드를 채우려면 누락된 샤드 키 필드를 참조하세요 .
샤드 키를 수정하기 전에 컬렉션의 전체 또는 대부분의 문서에 접미사 필드가 있는지 확인하여 나중에 필드를 채울 필요가 없도록 합니다.
이전 버전에서는 샤드 키를 선택하면 해당 샤드 키를 수정할 수 없습니다.
중요
샤드 키 누락
접미사가 있는 샤드 키를 세분화할 수 있는 기능으로 컬렉션의 모든 문서에 접미사 필드가 없을 수 있습니다. 버전 4 부터 시작됩니다.4, 샤드 컬렉션의 문서에 샤드 키 필드가 누락될 수 있습니다. 이전 버전에서는 샤드 컬렉션의 모든 문서에 샤드 키 필드가 있어야 합니다. 자세한 내용은 누락된 샤드 키 필드를 참조하세요.
헤지된 읽기
지연 시간을 최소화하기 위해 mongos
인스턴스는 기본적으로 헤지 읽기 를 사용할 수 있습니다. 헤지된 읽기(hedged read)를 사용하면 mongos
인스턴스는 쿼리된 각 샤드당 여러 멤버로 읽기 작업을 라우팅하고 샤드당 첫 번째 응답자로부터 결과를 반환할 수 있습니다. 기본적으로 mongos
인스턴스는 헤지된 읽기(hedged read) 사용을 지원합니다. 헤지된 읽기(hedged read)에 대한 mongos
인스턴스의 지원을 끄려면mongos
에 대한 readHedgingMode
매개변수를 설정합니다
헤지된 읽기(hedged read)는 읽기 설정의 일부로 작업별로 지정됩니다. primary
이 아닌 읽기 설정 은 헤지된 읽기(hedged read)를 지원합니다. 읽기 설정 nearest
은 기본적으로 헤지된 읽기(hedged read)를 지정합니다.
자세한 내용은 다음을 참조하세요.
헤지된 읽기(hedged read) 매개변수
매개변수 | 설명 |
---|---|
헤지된 읽기(hedged read)에 대한 mongos 인스턴스의 지원을 활성화하거나 비활성화합니다. | |
읽기 설정을 위한 헤지된 읽기(hedged read) 옵션
읽기 설정에 대해 헤지된 읽기(hedged read)를 지정하려면 MongoDB 4 을(를) 사용합니다.4 에는 헤지된 읽기( hedged read) 옵션 이 도입되었습니다. MongoDB 드라이버를 사용하여 설정하려면 드라이버 읽기 설정 API 문서를 참조하세요.
다음 mongo
shell 메서드는 지정된 읽기 설정 (read preference)에 대해 헤지된 읽기(hedged read)를 활성화하는 헤지 옵션을 허용할 수 있습니다.
헤지된 읽기(hedged read) 지표
명령 serverStatus
및 해당 mongo
shell 메서드 db.serverStatus()
은 hedgingMetrics
을 반환합니다.
balancerCollectionStatus
명령
MongoDB 4.4 은 명령이 실행되는 시점에 샤드 컬렉션의 청크가 균형을 이루고 있는지(즉, 이동할 필요가 없는지) 여부에 대한 정보를 반환하는 balancerCollectionStatus
명령과 mongo
셸 헬퍼 메서드 sh.balancerCollectionStatus()
를 제공합니다. 또는 이동해야 합니다. 이 명령을 사용하면 초기 청크 생성 및 마이그레이션이 완료되었는지 확인할 수 있습니다.
mongos
시작 절차 개선
MongoDB 4 부터 시작합니다.4, mongos
는 다음과 같은 새로운 기본 시작 동작을 추가합니다.
mongos
첫 번째 수신 클라이언트 연결에 대해 온디맨드 방식으로 수행하는 대신 시작 시 샤드 클러스터의 라우팅 테이블을 미리 로드합니다.mongos
수신 클라이언트 연결에 대해 온디맨드 방식으로 수행하는 대신 시작 시 샤드 호스트로 연결 풀을 미리 워밍업합니다.
이 동작으로 인해 mongos
인스턴스가 시작되거나 다시 시작된 후 초기 클라이언트 연결의 서비스 속도가 빨라집니다. 특히, 여러 mongos
인스턴스를 사용하는 사이트에서 연결 설정을 기다려야 하는 해당 인스턴스에 대한 초기 클라이언트 요청 없이 필요에 따라 인스턴스를 다시 시작하거나 새 인스턴스를 추가할 수 있습니다.
라우팅 테이블 사전 로드와 연결 풀 사전 예열은 모두 기본적으로 활성화되어 있습니다.
MongoDB 4.4 는 이 동작을 제어하기 위해 다음 매개 변수를 추가합니다.
기본값:
true
(활성화됨)
warmMinConnectionsInShardingTaskExecutorPoolOnStartup
기본값:
true
(활성화됨)
warmMinConnectionsInShardingTaskExecutorPoolOnStartupWaitMS
기본값:
2000
(2 초)설정된 연결 풀 크기에 관계없이
mongos
에 대한 클라이언트 연결이 허용되기 전의 시간 제한을 밀리초 단위로 설정합니다.
라우팅 테이블 업데이트 개선
또는 flushRouterConfig
movePrimary
명령을 실행한 dropDatabase
후에는 더 이상 를 실행할 필요가 없습니다. 이제 이 두 명령은 실행 시 필요에 따라 샤드 클러스터의 라우팅 테이블을 자동으로 새로 고칩니다.flushRouterConfig flushRouterConfig
고려 사항 에 설명된 경우에도 명령을 수동으로 실행하는 것이 좋습니다.
복합 해시 샤드 키
MongoDB 4 부터 시작.4, 단일 해시 필드가 있는 복합 샤드 키를 사용하여 컬렉션을 샤딩할 수 있습니다. 4 이전.4, MongoDB는 해시 필드가 있는 복합 샤드 키를 지원하지 않습니다.
복합 해시 샤딩은 영역 샤딩 과 같은 기능을 지원하며, 접두사(즉, 첫 번째) 비해시 필드 또는 필드가 영역 범위를 지원하고 해시 필드는 샤딩된 데이터의 보다 균등한 배포를 지원합니다. 예를 들어, 다음 작업은 구역 샤딩을 지원하는 복합 해시 샤드 키에서 컬렉션을 샤딩합니다.
sh.shardCollection( "examples.compoundHashedCollection", { "fieldA" : 1, "fieldB" : 1, "fieldC" : "hashed" } )
복합 해시 샤딩은 단조롭게 증가하는 필드 와 관련된 데이터 배포 문제를 해결하기 위해 해시 접두사가 있는 샤드 키도 지원합니다. 예를 들어 다음 작업은 해시 필드가 샤드 키 접두사인 복합 해시 샤드 키에서 컬렉션을 샤딩합니다.
sh.shardCollection( "examples.compoundHashedCollection", { "_id" : "hashed", "fieldA" : 1} )
청크 마이그레이션 페일오버 복원력 개선
MongoDB 4 부터 시작.4, 다음 변경 사항은 페일오버 중 청크 마이그레이션 및 고아 문서 정리 복원력을 개선합니다.
청크 마이그레이션 후 정리를 기다리는 청크 범위는 이제
config.rangeDeletions
컬렉션에 유지되고 샤드 전체에 복제됩니다. 페일오버가 발생하면 샤드의 새 프라이머리는config.rangeDeletions
컬렉션의 문서를 읽고 해당 범위 삭제를 재개합니다. 정리 대기 중인 범위를 설명하는 문서는 범위가 삭제된 후config.rangeDeletions
컬렉션에서 삭제됩니다.cleanupOrphaned
명령은 더 이상 샤드에서 고아 문서를 삭제하지 않습니다. 대신cleanupOrphaned
는 샤드에서 삭제되도록 예약된 고아 문서가 삭제될 때까지 기다립니다.
샤드의 프라이머리에서 disableResumableRangeDeleter
매개 변수를 true
로 설정하여 샤드에서 범위 삭제를 일시 중지합니다.
일반적인 샤드 클러스터 개선 사항
인덱스 일관성 검사
MongoDB 4 부터 시작.4, config 서버 프라이머리는 기본적으로 샤드 컬렉션에 대해 샤드 전체에 인덱스 불일치가 있는지 확인합니다. serverStatus
명령은 shardedIndexConsistency
필드를 반환하여 config 서버 프라이머리에서 실행할 때 인덱스 불일치를 보고합니다.
인덱스 일관성 검사를 구성하기 위해 MongoDB는 다음 매개 변수를 제공합니다.
매개변수 | 설명 |
---|---|
인덱스 일관성 검사를 활성화하거나 비활성화합니다. | |
config 서버의 프라이머리가 샤드 컬렉션의 인덱스 일관성을 확인하는 간격입니다. |
동시 removeShard
작업
MongoDB 4 부터 시작.4, 진행 중인 removeShard
작업이 두 개 이상 있을 수 있습니다.
이전 버전에서는 다른 작업이removeShard
removeShard
진행 중이면 가 오류를 반환합니다.
샤드 키 제한
버전 4 부터 시작됩니다.4, MongoDB는 샤드 키 크기에 대한 512바이트 제한을 제거합니다. MongoDB 4 의 경우.2 이하에서는 샤드 키는 512 바이트를 초과할 수 없습니다.
부분 결과
4 부터 시작됩니다.4, find
또는 후속 getMore
명령이 쿼리된 샤드를 사용할 수 없어 부분적인 결과를 반환하는 경우 출력에 부울 플래그 partialResultsReturned
이 포함됩니다.
점보 청크 마이그레이션
너무 커서 마이그레이션할 수 없는 청크의 경우 MongoDB 4 부터 시작합니다.4:
새로운 밸런서 설정
attemptToBalanceJumboChunks
을 사용하면 청크에 점보 레이블이 지정되지 않은 한 밸런서가 이동하기에는 너무 큰 청크를 마이그레이션할 수 있습니다. 자세한 내용은 크기 제한을 초과하는 청크 밸런스 를 참조하세요.moveChunk
명령은 새로운 옵션 forceJumbo 를 지정하여 너무 커서 이동할 수 없는 청크를 마이그레이션할 수 있습니다. 청크는 점보로 표시되거나 표시되지 않을 수 있습니다.
카탈로그 캐시 새로 고침 개선
4 부터 시작됩니다.4, 오래된 청크가 있는 경우 라우터 가 이전에 해당 청크를 보유했거나 현재 보유하고 있는 샤드에 액세스할 때만 카탈로그 캐시가 새로 고쳐집니다.
MongoDB 4 이전 버전.4, 오래된 청크가 있으면 컬렉션의 전체 청크 배포가 오래된 것으로 표시되고 샤드에 접속하는 모든 라우터 가 샤드 카탈로그 캐시를 새로 고쳐야 합니다. MongoDB 4.4 는 대상 샤드에 대해서만 카탈로그 캐시 새로 고침을 비활성화하고 이전 카탈로그 캐시 새로 고침 동작을 사용하기 위한 enableFinerGrainedCatalogCacheRefresh
시작 매개 변수를 추가합니다. enableFinerGrainedCatalogCacheRefresh
매개변수의 기본값은 true
입니다.
system.sessions
컬렉션 자동 분할
버전 4 부터 시작됩니다.4 (및 4.2.7), MongoDB는 system.sessions
컬렉션을 최소 1024 청크로 자동으로 분할하고 클러스터의 샤드 전체에 청크를 균일하게 분산합니다.
프로젝션
MongoDB 4.4부터 find()
및 findAndModify()
프로젝션을 애그리게이션의 $project
단계와 일치시키기 위한 일환으로,
find()
및findAndModify()
프로젝션은 리터럴 및 애그리게이션 변수 사용을 포함하여 애그리게이션 표현식 및 애그리게이션 구문을 사용할 수 있습니다. 애그리게이션 표현식과 구문을 사용하여 새 필드를 프로젝션하거나 기존 필드를 새 값으로 프로젝션할 수 있습니다.find()
및findAndModify()
프로젝션은 중첩된 양식을 사용하여 포함된 필드를 지정할 수 있습니다. 예:{ field: { nestedfield: 1 } }
및 점 표기법. 이전 버전에서는 점 표기법만 사용할 수 있습니다.
자세한 내용은 다음을 참조하세요.
팁
다음도 참조하세요.
$meta
연산자
$meta
키워드 지원
MongoDB 4 부터 시작.4, $meta
연산자는 indexKey
메타데이터 검색에 대한 지원을 추가합니다. indexKey
메타데이터는 디버깅 목적으로만 사용되며 애플리케이션 로직에는 사용되지 않습니다. 자세한 내용은 $meta
를 참조하세요.
{ $meta: "textScore" }
다음과 함께 사용 find()
버전 부터 4 시작됩니다.4, MongoDB는 { $meta: "textScore" }
와 함께 사용할 때 db.collection.find()
다음과 같이 를 변경합니다.
{ $meta: "textScore" }
를$text
사용하려면 쿼리 조건자에 연산자를 지정해야 합니다.textScore
을(를) 프로젝트할 필요 없이 검색 관련성(예:{ $meta: "textScore" }
)을 기준으로 결과 문서를 정렬할 수 있습니다.이전 버전에서는{ $meta: "textScore" }
에sort()
표현식을 포함하려면 프로젝션에도 동일한 표현식을 포함해야 했습니다.프로젝션과 정렬 모두에
{ $meta: "textScore" }
표현식을 포함하는 경우(예:db.collection.find(<$text search>, <projection>).sort(<sort>)
) 프로젝션 및 정렬 문서의 표현식에 대해 서로 다른 필드 이름을 가질 수 있습니다.이전 버전의 MongoDB에서는 프로젝션과 정렬 모두에{ $meta: "textScore" }
를 포함하는 경우 두 위치에 동일한 필드 이름을 지정해야 합니다.
자세한 내용은 텍스트 점수 메타데이터 $meta: "textScore"
를 참조하세요. "textScore"
프로젝션 및 정렬의 예는 텍스트 검색 점수 예시를 참조하세요.
트랜잭션
MongoDB 4 부터 시작.4 기능 호환성 버전(fcv) "4.4"
을 사용하는 경우 트랜잭션이 크로스 샤드 쓰기 트랜잭션(write transaction)이 아닌 이상 다중 문서 트랜잭션 내에서 컬렉션과 인덱스를 생성할 수 있습니다.
트랜잭션 내에서 컬렉션을 만들 때
다음과 같이 컬렉션을 암시적으로 만들 수 있습니다.
존재하지 않는 컬렉션에 대한 삽입 작업
존재하지 않는 컬렉션에 대해
upsert: true
을(를) 사용하여 업데이트/findAndModify 작업을 수행합니다.
create
명령 또는 해당 헬퍼db.createCollection()
를 사용하여 컬렉션을 명시적으로 만들 수 있습니다.시스템 컬렉션
db.createCollection()
에 대해 메서드를 실행하면 실패합니다.
트랜잭션 내에서 인덱스를 생성하는 경우:
존재하지 않는 컬렉션에 인덱스를 만들 수 있습니다. 컬렉션은 작업의 일부로 생성됩니다.
동일한 트랜잭션에서 이전에 생성된 새 빈 컬렉션에 인덱스를 생성할 수 있습니다.
시스템 컬렉션
db.collection.createIndex()
에 대해 메서드를 실행하면 실패합니다.
자세한 내용 은 트랜잭션에서 컬렉션 및 인덱스 생성을 참조하세요.
MongoDB 4.4 은 트랜잭션 내에서 컬렉션 및 인덱스 생성을 활성화(기본값)하거나 비활성화할 수 있는 새 매개변수 shouldMultiDocTxnCreateCollectionAndIndexes
를 추가합니다. 샤드 클러스터에 대한 매개변수를 설정할 때는 모든 샤드에서 매개변수를 설정합니다.
트랜잭션 내에서 컬렉션이나 인덱스를 명시적으로 만들려면 트랜잭션 읽기 고려 수준이 "local"
여야 합니다. 명시적 생성은 이제 끝났습니다.
정렬
$sort
변경 사항
MongoDB 4 부터 시작.4, sort()
메서드는 이제 $sort
애그리게이션 단계와 동일한 정렬 알고리즘을 사용합니다. 이 변경 사항으로 인해 중복 값이 포함된 필드에 sort()
를 수행하는 쿼리로 인해 해당 값에 대해 일관되지 않은 정렬 순서가 발생할 가능성이 훨씬 높아집니다.
중복 값에 sort()
를 사용할 때 정렬 일관성을 보장하려면 고유 값만 포함하는 추가 필드를 정렬에 포함합니다.
이 작업은 정렬에 _id
필드를 추가하면 쉽게 수행할 수 있습니다.
자세한 내용은 Sort Consistency(정렬 일관성)을(를) 참조하세요.
보안 개선 사항
새로운 Kerberos 유효성 검사 도구 mongokerberos
MongoDB Enterprise 4.4 는 MongoDB와 함께 사용할 플랫폼의 Kerberos 구성 유효성을 검사하고 Kerberos를 통한 엔드 투 엔드 클라이언트 인증을 테스트하기 위한 새로운 mongokerberos
도구를 제공합니다. 실행되면 mongokerberos
은(는) 발생한 문제를 나타내는 보고서를 반환하고 문제를 해결하기 위한 잠재적인 조언을 제공합니다. mongokerberos
는 MongoDB Enterprise에서만 사용할 수 있습니다.
OCSP
버전 4 부터 시작됩니다.4, MongoDB는 기본적으로 OCSP(온라인 인증서 상태 프로토콜)를 사용하여 인증서 해지를 확인할 수 있도록 설정합니다. OCSP를 사용하면 주기적으로 Certificate Revocation List (CRL)
를 다운로드하고 업데이트된 CRL로 mongod
/ mongos
을(를) 다시 시작할 필요가 없습니다.
버전 4.0 및 4.2에서는 Windows 또는 macOS에서 system certificate store
를 사용해야만 OCSP를 사용할 수 있습니다.
팁
다음도 참조하세요.
OCSP 스테이플링/필수 스테이플링
OCSP 지원의 일환으로 MongoDB 4.4 는 Linux에서 다음을 지원합니다.
OCSP 스테이플링. OCSP 스테이플링을 사용하면
mongod
및mongos
인스턴스가 TLS/SSL 핸드셰이크 중에 클라이언트에 OCSP 상태 응답을 제공할 때 인증서에 OCSP 상태 응답을 연결하거나 "스테이플"합니다. OCSP 상태 응답을 인증서에 포함하면 OCSP 스테이플링을 사용하면 클라이언트가 제공된 인증서의 OCSP 상태를 검색하기 위해 별도의 요청을 할 필요가 없습니다.OCSP 필수 스테이플 확장. OCSP 필수 스테이플은 서버 인증서에 추가할 수 있는 확장으로, 클라이언트가 TLS/SSL 핸드셰이크 중에 인증서를 받을 때 OCSP 스테이플을 기대하도록 지시합니다.
OCSP 매개변수
MongoDB 4.4 은 다음 OCSP 매개변수를 추가합니다. setParameter
구성 파일 설정 또는 --setParameter
명령줄 옵션을 사용하여 시작 시 이러한 매개 변수를 설정할 수 있습니다.
매개변수 | 설명 |
---|---|
OCSP 지원을 사용하거나 사용하지 않도록 설정합니다. | |
스테이플링된 OCSP 상태 응답을 새로 고치기 전에 대기할 시간(초)을 지정합니다. | |
x.509 인증서 만료 임박 트리거 경고
MongoDB 4 부터 시작.4, mongod
/ mongos
는 x가 표시되면 연결 시 경고를 기록합니다.509 인증서가 mongod/mongos
시스템 시계로부터 30
일 이내에 만료됩니다. 특히 mongod
또는 mongos
에 대한 다음 연결은 x를 트리거할 수 있습니다.509 인증서 만료 경고:
MongoDB 드라이버 를 사용하여 TLS 연결 을 설정 하거나 x 를 수행하는
mongo
셸 또는 애플리케이션입니다. 일 이내에 만료되는 인증서로 509 30 클라이언트 인증 . (즉,mongo --tlsCertificateKeyFile
또는tlsCertificateKeyFile
에 지정된 인증서).mongod
x 를509 수행하는 클러스터 30 멤버입니다. 일 이내에 만료되는 인증서로 멤버십을net.tls.clusterFile
mongod --tlsClusterCertificateSelector
인증합니다 .net.tls.clusterCertificateSelector
(즉, , ,mongod --tlsClusterFile
또는 에 지정된 인증서).x 를 수행하는
mongos
클러스터 멤버입니다. 일 이내에 만료되는 인증서로 509 30 멤버십을 인증합니다 . (즉, 에 지정된 인증서 (즉,net.tls.clusterFile
,net.tls.clusterCertificateSelector
,mongos --tlsClusterFile
또는mongos --tlsClusterCertificateSelector
에 지정된 인증서).
경고 로그 메시지는 다음과 유사합니다.
<Timestamp> W NETWORK [connection] Peer certificate <Certificate Subject Name> expires...
클라이언트 x를 사전에 갱신하는 것을 고려합니다. 클러스터에 대한 지속적인 연결을 보장하기 위해 509 인증서가 곧 만료됩니다.
MongoDB 4.4 는 인증서 만료 경고 임계값을 제어하기 위해 tlsX509ExpirationWarningThresholdDays
매개 변수를 추가합니다. 경고를 비활성화하려면 매개변수를 0
로 설정합니다. 전체 문서는 tlsX509ExpirationWarningThresholdDays
를 참조하세요.
TLS 1.3 지원
CentOS 8 및 RHEL 8, MongoDB 4.4 (버전 4.2, 4.0 및 3.6)은 TLS1 을 지원합니다.3.
네트워크 또는 인증 실패 시 사용자-DN 매핑 종료
mongod
, mongos
또는 mongoldap
는 LDAP 서버에 대한 네트워킹 또는 인증 실패로 인해 사용자와 DN(고유 이름) 매핑 중 하나를 평가할 수 없는 경우 오류를 반환합니다.
mongod
, mongos
또는 mongoldap
는 연결 요청을 거부하고 나머지 매핑(있는 경우)을 확인하지 않습니다.
사용자-DN 매핑을 지정하려면 다음을 참조하세요.
구조화된 로깅
MongoDB 4 부터 시작.4, mongod
/ mongos
인스턴스는 이제 모든 로그 메시지를 구조화된 JSON 형식으로 출력합니다. 로그 항목은 일련의 키-값 쌍으로 작성되며, 각 키는 '심각도'와 같이 로그 메시지 필드 유형을 나타내고, 각 해당 값은 '정보'와 같이 해당 필드 유형에 대한 관련 로깅 정보를 기록합니다.
여기에는 파일, syslog 및 stdout (표준 출력) 로그 대상 으로 전송된 로그 출력과 getLog
명령의 출력이 포함됩니다.
이전에는 로그 항목이 일반 텍스트로 출력되었습니다.
JSON 형식의 다음 로그 메시지는 mongod
이(가) 수신 대기 중이며 연결 준비가 되었음을 나타냅니다.
{"t":{"$date":"2020-05-18T20:18:13.533+00:00"},"s":"I", "c":"NETWORK", "id":23015, "ctx":"listener","msg":"Listening on","attr":{"address":"127.0.0.1"}} {"t":{"$date":"2020-05-18T20:18:13.533+00:00"},"s":"I", "c":"NETWORK", "id":23016, "ctx":"listener","msg":"Waiting for connections","attr":{"port":27001,"ssl":"off"}}
키-값 쌍을 사용한 구조화된 로깅을 사용하면 자동화된 도구 또는 로그 수집 서비스를 통해 효율적인 로그 분석이 가능하고 프로그래밍 방식의 로그 구문 분석 이 더 쉽고 강력해집니다.
MongoDB 구조화된 로깅으로 작업할 때 타사 jq 명령줄 유틸리티 는 는 로그 항목을 쉽게 예쁘게 인쇄하고 강력한 키 기반 일치 및 필터링을 할 수 있는 유용한 도구입니다.
jq
는 오픈 소스 JSON 파서이며 Linux, Windows, macOS에서 사용할 수 있습니다.
로그 항목 구성 요소에 대한 자세한 검사와 명령줄 구문 분석 예제를 포함하여 구조화된 로깅에 대한 자세한 내용은 로그 메시지를 참조하세요.
다중 LDAP 비밀번호 지원
MongoDB 4 부터 시작.4 ldapQueryPassword
setParameter
명령은 문자열 또는 문자열 배열을 허용합니다. 배열로 설정하면 성공할 때까지 각 비밀번호를 시도합니다. 이를 사용하여 MongoDB의 다운타임 없이 LDAP 계정 비밀번호의 롤오버를 수행할 수 있습니다.
플랫폼 지원
추가된 플랫폼
MongoDB 4.4 는 다음 플랫폼에 대한 지원을 추가합니다.
제거된 플랫폼
MongoDB 4.4 는 다음 플랫폼에 대한 지원을 제거합니다.
Amazon Linux 2013.03
390x 아키텍처의RHEL 6 / 6 6 CentOS / Oracle
Windows 7 / 서버 2008 R2
Windows 8 / 서버 2012
Windows 8.1 / 서버 2012 R2
macOS 10.12
MongoDB 4 에서 지원되는 플랫폼 및 아키텍처의 전체 목록은 플랫폼 지원 을 참조하세요.4.
Mongo 셸
Mongo Shell, Atlas 클러스터용 AWS IAM 자격 증명 지원
MongoDB 부터 4 시작.4,mongo
셸은 AWS IAM 자격 증명 사용을 지원합니다. AWS IAM 인증을 위해 구성된 MongoDB Atlas 클러스터에 인증합니다.
이 방식으로 인증하려면 새로운 MONGODB-AWS
authentication mechanism
이(가) 사용되며, Amazon Web Services 액세스 키 ID와 비공개 액세스 키를 제공해야 하며, 이는 연결 문자열 이나 --username
를 통해 명령줄에서 지정할 수 있습니다. --password
옵션.
또한 AWS 세션 토큰 을 사용하는 경우 AssumeRole 을 사용할 때 임시 자격 증명으로 인증하기 위해 요청을 사용하거나 Lambda와 같이 이 값을 지정하는 AWS 리소스로 작업할 때 AWS_SESSION_TOKEN
값을 사용하여 연결 authMechanismProperties
--awsIamSessionToken
문자열에 해당 세션 토큰을 제공하거나 옵션을 통해 명령줄에서 제공할 수 있습니다.
또는 AWS 액세스 키 ID, 보안 액세스 키 또는 세션 토큰이 해당 AWS IAM 환경 변수 를 사용하여 플랫폼에서 정의된 mongo
경우 셸은 이러한 환경 변수 값을 사용하여 인증합니다. 연결 문자열에 지정할 필요가 없습니다.
사용에 대한 연결 문자열 인증 옵션 및 예시는 MONGODB-AWS를 사용하여 Atlas 클러스터에 연결을 참조하세요.
도구
MongoDB 데이터베이스 도구 프로젝트로 마이그레이션
MongoDB 4 부터 시작.4, 다음 도구에 대한 설명서가 MongoDB 데이터베이스 도구 프로젝트로 마이그레이션되었습니다.
MongoDB 데이터베이스 도구는 Apache 라이선스, 버전 2 을(를)0 사용합니다. .mongodb/mongo-tools 참조 소스 코드의 경우.
참고
나열된 도구의 이전 버전에 대한 설명서는 해당 버전의 MongoDB 서버 매뉴얼을 참조하세요.
이전 문서에 대한 빠른 링크:
새로운 mongokerberos
Kerberos 유효성 검사 도구
MongoDB Enterprise 4.4 는 MongoDB와 함께 사용할 플랫폼의 Kerberos 구성 유효성을 검사하고 Kerberos를 통한 엔드 투 엔드 클라이언트 인증을 테스트하기 위한 새로운 mongokerberos
도구를 제공합니다. 실행되면 mongokerberos
은(는) 발생한 문제를 나타내는 보고서를 반환하고 문제를 해결하기 위한 잠재적인 조언을 제공합니다. mongokerberos
는 MongoDB Enterprise에서만 사용할 수 있습니다.
자세한 내용은 mongokerberos
참조 페이지를 참조하세요.
mongoreplay
MongoDB 패키징에서 제거됨
MongoDB 4 4mongoreplay
부터 시작. , 이(가) MongoDB 패키징에서 제거되었습니다. mongoreplay
및 관련 문서가 다음으로 마이그레이션 됩니다. github 프로젝트. 의 mongodb-labs
프로젝트는 실험적이며 MongoDB에서 공식적으로 지원하지 않습니다.
이전 문서에 대한 퀵 링크
Windows MSI에 패키지로 제공되지 않는 MongoDB 데이터베이스 도구
Community 및 Enterprise 에디션 모두에 대한 Windows MSI 설치 프로그램 에는 MongoDB 데이터베이스 도구 (mongoimport
, mongoexport
등)가 포함되어 있지 않습니다. Windows에 MongoDB 데이터베이스 도구를 다운로드하여 설치하려면 MongoDB 데이터베이스 도구 설치를 참조 하세요.
MongoDB 4 에 의존하는 경우.2 또는 이전 MSI 설치 프로그램을 사용하여 데이터베이스 도구를 MongoDB Server와 함께 설치하려면 이제 데이터베이스 도구를 별도로 다운로드해야 합니다.
드라이버
새 드라이버
이제 공식 MongoDB Rust 드라이버 를 사용할 수 있습니다.
이제 공식 MongoDB Swift 드라이버 를 사용할 수 있습니다.
인덱스
복합 해시 인덱스
MongoDB 4.4 는 단일 해시 필드 로 복합 인덱스를 생성하기 위한 지원을 추가합니다. MongoDB 4.2 및 이전 버전에서는 단일 필드 해시 인덱스만 지원했습니다.
다음 작업은 country
및 _id
에 복합 해시 인덱스를 생성합니다.
db.examples.createIndex( { "country" : 1, "_id" : "hashed" } )
복합 해시 인덱스를 사용하려면 featureCompatibilityVersion 을 4.4
으)로 설정해야 합니다.
팁
다음도 참조하세요.
숨겨진 인덱스
버전 4 부터 시작됩니다.4, MongoDB에는 쿼리 플래너에서 인덱스를 숨기거나 숨기기를 해제하는 기능이 추가되었습니다. 쿼리 플래너에서 숨겨진 인덱스는 쿼리 계획 선택의 일부로 평가되지 않습니다.
플래너에서 인덱스를 숨기면 인덱스를 삭제하지 않고도 인덱스 삭제의 잠재적 영향을 평가할 수 있습니다. 영향이 부정적인 경우 삭제된 인덱스를 다시 만들 필요 없이 인덱스 숨기기를 해제할 수 있습니다. 그리고 인덱스는 숨겨진 동안 완전히 유지되므로 숨겨진 인덱스는 숨기기를 해제하면 즉시 사용할 수 있습니다.
자세한 내용은 숨겨진 인덱스를 참조하세요.
숨겨진 인덱스 를 지원하기 위해 MongoDB는 다음을 도입합니다.
새로운 인덱스 옵션
hidden
. 이 옵션은 다음 작업에서 지정할 수 있습니다.기존 인덱스를 숨기거나 숨기기를 해제하는 새로운
mongo
shell 헬퍼 메서드:
dropIndexes
진행 중인 인덱스 빌드를 중단할 수 있음
dropIndexes
에 지정된 인덱스가 아직 빌드 중인 경우 dropIndexes
는 진행 중인 빌드를 중단하려고 시도합니다. 인덱스 빌드를 중단하면 빌드된 인덱스를 삭제하는 것과 동일한 효과가 있습니다. MongoDB 4 이전 버전.4, dropIndexes
은 컬렉션에 진행 중인 인덱스 빌드가 있는 경우 오류를 반환합니다. 이 동작은 셸 헬퍼 db.collection.dropIndex()
및 db.collection.dropIndexes()
에도 적용됩니다.
dropIndexes
/dropIndexes()
에 지정된 인덱스는 지정된 인덱스 빌더와 연결된 진행 중인 빌드의 전체 세트, 즉 단일createIndexes
또는db.collection.createIndexes()
작업으로 빌드된 인덱스여야 합니다.dropIndex()
에 지정된 인덱스는 인덱스 빌더와 연결된 유일한 인덱스, 즉 단일createIndexes
또는db.collection.createIndexes()
작업으로 작성된 인덱스여야 합니다.
관련 진행 중인 빌드 세트에서 특정 인덱스를 삭제하려면 인덱스 빌드가 완료될 때까지 기다렸다가 해당 인덱스를 dropIndexes
또는 해당 셸 헬퍼에 지정합니다.
자세한 내용은 다음을 참조하세요.
명령에
dropIndexes
대해 진행 중인 인덱스빌드를 중단합니다 .메서드에
dropIndex()
대한진행 중인 인덱스 빌드 를 중단합니다.
drop()
진행 중인 인덱스 빌드를 중단할 수 있음
db.collection.drop()
메서드와 drop
명령은 collection을 삭제하기 전에 대상 collection에서 진행 중인 인덱스 빌드를 모두 중단합니다.
복제본 세트 또는 샤드 복제본 세트의 경우 기본 인덱스에서 인덱스를 중단해도 보조 인덱스 빌드가 동시에 중단되지는 않습니다. MongoDB가 프라이머리 인덱스에서 지정된 인덱스에 대해 진행 중인 빌드를 중단하려고 시도하고 성공하면 연결된 abort
oplog 항목을 생성합니다. 복제된 진행 중인 빌드가 있는 세컨더리 멤버는 인덱스 빌드를 커밋하거나 중단하기 전에 프라이머리에서 oplog 항목을 커밋하거나 중단할 때까지 기다립니다.
복제본 세트 또는 샤드 복제본 세트의 경우 기본 인덱스에서 인덱스를 중단해도 보조 인덱스 빌드가 동시에 중단되지는 않습니다. MongoDB가 프라이머리 인덱스에서 지정된 인덱스에 대해 진행 중인 빌드를 중단하려고 시도하고 성공하면 연결된 abort
oplog 항목을 생성합니다. 복제된 진행 중인 빌드가 있는 세컨더리 멤버는 인덱스 빌드를 커밋하거나 중단하기 전에 프라이머리에서 oplog 항목을 커밋하거나 중단할 때까지 기다립니다.
dropDatabase
진행 중인 인덱스 빌드를 중단할 수 있음
db.dropDatabase()
메서드와 dropDatabase
명령은 데이터베이스를 삭제하기 전에 대상 데이터베이스의 collection에서 진행 중인 인덱스 빌드를 중단합니다. 인덱스 빌드를 중단하면 빌드된 인덱스를 삭제하는 것과 동일한 효과가 있습니다.
팁
다음도 참조하세요.
geoHaystack
인덱스 및 geoSearch
명령의 사용 중단
MongoDB 4.4 은 geoHaystack 인덱스 및 geoSearch
명령을 더 이상 사용하지 않습니다. 대신 또는 와 $geoNear
2함께 d $geoWithin
인덱스 를 사용합니다.
제거된 명령
MongoDB는 다음 명령과 mongo
shell helper를 제거합니다.
제거된 명령 | 제거된 도우미 | 대안 |
---|---|---|
cloneCollection | db.cloneCollection() |
|
planCacheListPlans | PlanCache.getPlansByQuery() |
$planCacheStats 변경 사항 도 참조하세요. |
planCacheListQueryShapes | PlanCache.listQueryShapes() |
$planCacheStats 변경 사항 도 참조하세요. |
Networking
TCP Fast Open 지원
MongoDB 4 부터 시작합니다.4, mongod
및 mongos
는 기본적으로 TFO(TCP Fast Open) 연결을 지원합니다. TFO를 사용하려면 클라이언트와 mongod/mongos
호스트 머신이 모두 필요하며 TFO를 활성화해야 합니다.
- Windows
다음 Windows 운영 체제에서 TFO를 지원합니다.
Microsoft Windows Server 2016 이상.
Microsoft Windows 10 업데이트 1607 이상.
- macOS
- macOS 10.11 (El Capitan) 이상 TFO 지원
- Linux
Linux 커널 3 을(를) 실행하는 Linux 운영 체제.7 이상은 인바운드 TFO 연결을 지원할 수 있습니다.
Linux 커널 4 을(를) 실행하는 Linux 운영 체제.11 이상은 인바운드 및 아웃바운드 TFO 연결을 모두 지원할 수 있습니다.
인바운드 및/또는 아웃바운드 TFO 연결을 지원하려면
/proc/sys/net/ipv4/tcp_fastopen
값을 설정합니다.아웃바운드 TFO 연결만 허용하려면
1
으)로 설정하세요.인바운드 TFO 연결만 허용하려면
2
으)로 설정하세요.인바운드 및 아웃바운드 TFO 연결을 사용하려면
3
으로 설정합니다.
MongoDB 4.4 은(는) TFO를 제어하기 위해 다음 매개 변수를 추가합니다.
매개변수 | 설명 |
---|---|
기본값: 인바운드 TFO 연결에 대한 지원을 활성화하거나 비활성화합니다.
| |
기본값: Linux 운영 체제만 해당
| |
기본값: 보류 중인 TFO 연결의 대기열 크기를 제어합니다. |
MongoDB 4.4 은 serverStatus
및 db.serverStatus()
의 출력에 다음 카운터를 추가합니다.
카운터 | 설명 |
---|---|
Linux 한정 TFO에 대한 커널 지원을 나타냅니다. | |
수신 TFO 연결에 대한 운영 체제 지원을 나타냅니다. | |
발신 TFO 연결에 대한 운영 체제 지원을 나타냅니다. | |
TFO에 대한 완전한 논의는 이 문서의 범위를 벗어납니다. TFO에 대한 자세한 내용을 보려면 다음 외부 리소스부터 시작하세요.
일반 개선 사항
블로킹 정렬 제한 증가
MongoDB가 인덱스를 사용하여 지정된 cursor.sort()
작업에 대한 정렬 순서를 얻을 수 없는 경우 MongoDB는 데이터에 대해 블로킹 정렬을 수행해야 합니다. 블로킹 정렬은 MongoDB가 결과를 반환하기 전에 정렬에 필요한 모든 입력 문서를 사용하고 처리해야 함을 나타냅니다. 블로킹 정렬은 컬렉션이나 데이터베이스에서 동시 작업을 차단하지 않습니다.
MongoDB 이전 4 버전.4, 블로킹 정렬 작업에 32 메가바이트 이상의 시스템 메모리가 필요한 경우 MongoDB가 오류를 반환했습니다. MongoDB 부터 시작됩니다.4 4, 정렬 작업을 100 차단하면 정렬 작업에 사용할 수 있는 시스템 메모리 제한이 메가바이트로 늘어납니다.100 메가바이트 4 4 이상의 시스템 메모리가 필요한 블로킹 정렬 작업의 경우, 쿼리가 (cursor.allowDiskUse()
MongoDB의 새로운 기능 )을(를) 지정 하지 않는한 MongoDB는 오류를 반환합니다.
정렬 및 인덱스 사용에 대한 자세한 내용은 정렬 및 인덱스 사용을 참조 하세요.
팁
다음도 참조하세요.
find
임시 파일을 사용하여 인덱싱되지 않은 대규모 정렬 지원 가능
MongoDB 4.4 이(가) 명령에 새로운 옵션 allowDiskUse find
를 추가합니다.allowDiskUse: true 를 사용하면 메가바이트 메모리 제한을 초과하는 인덱싱되지 않은('차단') 정렬 작업을 처리할 때 작업에서 디스크의 임시 파일을사용할 수 100 있습니다. MongoDB 이전 버전. ,4 정렬을4 find
처리하는 동안 메모리 제한을 초과한 경우 블로킹 정렬이 포함된 작업이 실패했습니다.
db.collection.find()
cursor.sort()
를 4 4 사용하는 셸 메서드의 cursor.allowDiskUse()
경우 MongoDB 입니다. 은 커서 수정자를 추가합니다.
allowDiskUse 및 cursor.allowDiskUse()
는 MongoDB가 인덱스 를 사용하여 정렬을 충족할 수 있거나 블로킹 정렬에 100 메가바이트 미만의 메모리가 필요한 경우에는 효과가 없습니다.
MongoDB 드라이버를 통해 실행된 쿼리에 대해 allowDiskUse 를 활성화하는 방법에 대한 지침은 선호하는 MongoDB 4 설명서를 참조하세요.4-호환 드라이버.
팁
다음도 참조하세요.
컬렉션 네임스페이스 제한
MongoDB 4 부터 시작.4,
featureCompatibilityVersion 이 "4.4"
이상으로 설정된 경우 MongoDB는 collection/네임스페이스 제한을 255 바이트로 높입니다. collection 또는 뷰의 경우 네임스페이스에는 데이터베이스 이름, 점(.
) 구분 기호, collection/뷰 이름(예: <database>.<collection>
)이 포함됩니다.
유효성 검사 데이터 처리량 정보
$currentOp
및 currentOp
명령에는 진행 중인 유효성 검증 작업에 대한 dataThroughputAverage
및 dataThroughputLastSecond
정보가 포함됩니다.
유효성 검사 작업에 대한 로그 메시지에는 dataThroughputAverage
및 dataThroughputLastSecond
정보가 포함됩니다.
팁
다음도 참조하세요.
compact
행동 변화
차단
MongoDB 4 부터 시작.4, compact
는 다음 메타데이터 작업만 차단합니다.
db.collection.createIndex()
개인정보 정책에db.collection.createIndexes()
db.collection.dropIndex()
개인정보 정책에db.collection.dropIndexes()
compact
은(는) 현재 작동 중인 데이터베이스에 대한 MongoDB CRUD 작업 을 차단하지 않습니다.
이전에는 compact
가 MongoDB CRUD 작업 을 포함하여 운영 중인 데이터베이스에 대한 모든 작업을 차단했으므로 예정된 유지 관리 기간 동안에만 사용하기에 적합했습니다.
force
옵션
MongoDB 부터 4 4 force
시작.compact
, 플래그는 가 복제본 세트 의 프라이머리 에서 실행되도록 합니다.
이전에는 force
옵션을 로 설정하면 true
compact
복제본 세트 의 프라이머리 에서 를 실행할 수 있고,false
로설정하면 프라이머리에서 실행할 때 오류를 반환했습니다 .
팁
다음도 참조하세요.
mongod --repair
행동 변화
MongoDB 4 부터 시작.4, mongod --repair
는 다음에 대한 모든 인덱스를 다시 작성합니다.
컬렉션 데이터와 하나 이상의 인덱스 간에 불일치가 있는 컬렉션입니다.
회수 및 수정된 컬렉션.
이전 버전의 MongoDB에서는 mongod --repair
옵션이 모든 컬렉션의 모든 인덱스를 재구축했습니다.
serverStatus
출력 변경
필드 이름 변경
serverStatus
는 을 flowControl.locksPerKiloOp
flowControl.locksPerOp
반환합니다.
새 필드
serverStatus
출력에 다음과 같은 새로운 필드가 포함됩니다.
집계 지표
metrics.aggStageCounters
( 4.2.6+ 및 4.0.19+에서도 사용 가능합니다.)
연결 지표
기본 읽기 고려 쓰기 고려 지표
래치 지표
미러링된 읽기 메트릭
쿼리 실행 지표
복제 메트릭
네트워크 지표
보안 지표
샤딩 지표
serverStatus
샤딩 통계 출력 변경
shardingStatistics.numHostsTargeted
CRUD 작업 및 애그리게이션 명령의 대상이 되는 샤드 수를 보고합니다. 클러스터에서 각 작업을 수행할 때마다 관련 찾기, 삽입, 업데이트, 삭제 또는 집계 지표가 증가합니다.
replSetGetStatus
출력 변경
replSetGetStatus
다음과 같은 새 필드를 반환합니다.
db.auth()가 비밀번호를 묻는 메시지를 표시할 수 있음
MongoDB 4 부터 시작.4, mongo
shell 메서드 db.auth(<username>, <password>)
는 <password>
에 대한 비밀번호 또는 passwordPrompt()
메서드를 전달하지 않으면 비밀번호를 입력하라는 메시지를 표시합니다.
뷰에서 $natural
정렬 지원
진단 역추적 생성 지원
Linux에서 실행되는 MongoDB 인스턴스의 경우:
mongod
및mongos
프로세스가SIGUSR2
신호를 받으면 각 프로세스 스레드의 로그에 역추적 세부 정보가 추가됩니다.역추적 세부 정보에는 프로세스에 대한 함수 호출이 표시되며, 이러한 정보는 진단에 사용하고 필요한 경우 MongoDB 지원팀에 제공할 수 있습니다.
역추적 기능은 다음 아키텍처에서 사용할 수 있습니다.
x86_64
arm64
(MongoDB 5.0.10 에서 시작)
자세한 내용 은 역추적 생성을 참조하세요.
컨테이너 인식 FTDC 보고
MongoDB 4 부터 시작.4 부터 FTDC 는 이제 호스트 운영 체제가 아닌 컨테이너의 관점에서 컨테이너에서 실행 중인 mongod
의 사용률 데이터를 보고합니다. 자세한 내용은 풀타임 진단 데이터 캡처 에서 확인 가능합니다.
업데이트된 ulimit
시작 경고
MongoDB 4 부터 시작.4, mongod
는 플랫폼의 열린 파일 수에 대해 구성된 ulimit
값이 64000
미만인 경우 시작 경고를 기록합니다. 이전에는 이 값이 1000
미만인 경우에만 경고가 기록되었습니다. 자세한 내용은 권장 ulimit
설정 을 참조하세요.
새로운 replanReason
데이터베이스 프로파일러 출력 필드
MongoDB 4.4 이(가) 데이터베이스 프로파일러 출력 및 replanReason
진단 로그 메시지 에 필드를 추가합니다. 필드에는 쿼리 시스템이 replanReason
캐시된 계획을 제거한이유가 포함되어 있습니다.
dbStats
및 collStats
출력
dbStats
명령과 해당 mongo
shell helper db.stats()
가 다음을 반환합니다.
collStats
명령, 해당 mongo
shell helper db.collection.stats()
및 $collStats
애그리게이션 단계는 다음을 반환합니다.
freeStorageSize
재사용할 수 있는 스토리지의 양입니다.
추가 데이터베이스 명령에 사용할 수 있는 힌트
MongoDB 4 부터 시작.4, 다음 데이터베이스 명령은 hint
인수를 받아 사용할 인덱스를 지정할 수 있습니다.
delete
명령과 관련mongo
shell 메서드db.collection.deleteOne()
및db.collection.deleteMany()
.findAndModify
명령 및 관련mongo
shell 메서드:
참조:
JavaScript 실행 mongos
MongoDB 4 부터 시작.4, MongoDB는 mongos
인스턴스에서 JavaScript 실행을 허용합니다. mongos
인스턴스에서 JavaScript 실행을 비활성화하려면 다음을 수행합니다.
security.javascriptEnabled
구성 옵션을 false로 설정하거나--noscripting
명령줄 옵션을 지정합니다.
이전 버전의 MongoDB는 mongos
인스턴스에서 JavaScript 실행을 허용하지 않습니다.
전역 기본 읽기 및 쓰기 고려
참고
featureCompatibilityVersion 4.4 이상이 필요합니다.
복제본 세트 또는 샤드 클러스터의 mongod
각 에 featureCompatibilityVersion 이 최소 4.4
로 설정되어 있어야 글로벌 기본 읽기 및 쓰기 고려를 구성할 수 있습니다.
MongoDB 4 부터 시작.4, 복제본 세트 및 샤드 클러스터는 글로벌 기본 읽기 및 쓰기 고려 설정 구성을 지원합니다. 지정된 읽기 또는 쓰기 고려 설정을 명시적으로 지정하지 않은 클라이언트는 해당 전역 기본 설정을 상속합니다.
기본 글로벌 기본 읽기 또는 쓰기 고려를 구성하기 위해 MongoDB는 setDefaultRWConcern
관리 명령을 추가합니다. 복제본 세트의 경우 프라이머리 멤버에 대해 명령을 실행합니다. 샤드 클러스터의 경우 mongos
에서 명령을 실행합니다.
전역 기본 읽기 또는 쓰기 고려 설정을 검색하기 위해 MongoDB는 getDefaultRWConcern
관리 명령을 추가합니다.
우려 사항 출처 읽기
MongoDB 4 부터 시작.4, 읽기 고려 객체에는 읽기 고려의 출처를 나타내는 provenance
필드가 포함될 수 있습니다.
다음 표는 가능한 읽기 provenance
고려 의 값과 그 중요성을 보여줍니다.
출처 | 설명 |
---|---|
clientSupplied | 읽기 우려 사항은 애플리케이션에서 지정되었습니다. |
customDefault | 읽기 고려가 사용자가 정의한 기본값에서 발생했습니다. setDefaultRWConcern 을 참조하세요. |
implicitDefault | 다른 모든 읽기 고려 사양이 부재해 서버에서 읽기 고려가 발생했습니다. |
읽기 작업이 기록되거나 프로파일링된 경우 작업 항목에는 provenance
필드를 포함한 읽기 고려 객체가 포함됩니다.
MongoDB는 서버에 대한 요청에 provenance
필드를 지정하지 않는 것이 좋습니다. 이 필드는 진단 목적으로만 사용해야 합니다.
우려 사항 출처 작성
MongoDB 4 부터 시작.4, 쓰기 고려 객체에는 쓰기 고려의 출처를 나타내는 provenance
필드가 포함될 수 있습니다.
다음 표는 가능한 쓰기 고려 provenance
의 값과 그 중요성을 보여줍니다.
출처 | 설명 |
---|---|
clientSupplied | 쓰기 우려 사항은 애플리케이션에서 지정되었습니다. |
customDefault | 쓰기 고려는 사용자 정의된 기본값에서 비롯된 것입니다. setDefaultRWConcern 을 참조하십시오. |
getLastErrorDefaults | 쓰기 고려는 복제본 세트의 settings.getLastErrorDefaults 필드에서 발생했습니다. |
implicitDefault | 쓰기 고려는 다른 모든 쓰기 고려 사양이 없는 상태에서
서버에서 발생했습니다. |
쓰기 작업이 기록되거나 프로파일링된 경우 작업 항목에는 provenance
필드를 포함한 쓰기 고려 객체가 포함됩니다.
MongoDB는 서버에 대한 요청에 provenance
필드를 지정하지 않는 것이 좋습니다. 이 필드는 진단 목적으로만 사용해야 합니다.
currentOp
출력
$currentOp
에는 진행 중인 유효성 검사 작업에 대해 보고할 때dataThroughputAverage
및dataThroughputLastSecond
정보가 포함됩니다.currentOp
명령에는 진행 중인 유효성 검사 작업에 대해 보고할 때dataThroughputAverage
및dataThroughputLastSecond
정보가 포함됩니다.
다음에 대한 새로운 KMIP 연결 매개변수 mongod
MongoDB 4.4 Enterprise에는 Kerberos 인증의 일환으로 KMIP 서버에 대한 초기 연결을 향상시키기 위해 두 가지 새로운 구성 설정이 도입되었습니다.
연결 재시도
mongod
이(가) KMIP 서버에 대한 실패한 초기 연결을 재시도하는 횟수를 제어하려면 다음을 수행합니다.
security.kmip.connectRetries
구성 옵션을 설정하거나mongod --kmipConnectRetries
명령줄 옵션을 지정합니다.
연결 시간 초과
포기하거나 다시 시도하기 전에 KMIP 서버의 초기 응답을 기다리는 시간 제한(밀리초)을 제어하려면 다음을 수행합니다.
security.kmip.connectTimeoutMS
구성 옵션을 설정하거나mongod --kmipConnectTimeoutMS
명령줄 옵션을 지정합니다.
이러한 설정은 MongoDB Enterprise에서만 사용할 수 있습니다.
다음에 대한 새 시작 옵션 mongod
의 새로운 processUmask
시작 옵션을 mongod
사용하면 umask 를 통해 권한을 honorSystemUmask
설정할 수 false
있습니다. 이(가) (으)로 설정된 경우 그룹 및 기타 사용자의 경우
mapReduce
verbose
옵션 무시
MongoDB 4 부터 시작합니다.4, mapReduce
명령 및 db.collection.mapReduce()
셸 메서드는 verbose 옵션을 무시합니다.
explain
지원 대상 mapReduce
MongoDB 4 부터 시작합니다.4, explain
명령 또는 db.collection.explain()
셸 메서드를 사용하여 mapReduce
또는 db.collection.mapReduce()
의 결과를 미리 볼 수 있습니다.
explain
결과 개선
버전 4.4부터:
샤드 cluster에서 실행된 명령에 대한Explain 결과
mongos
에는serverInfo
각 샤드에 대해 반환된 객체 외에도 에 대한 최상위 serverInfo 객체가 포함됩니다. This is also available in versions 4.2.2, 4.0.14, and 3.6.16.설명 결과 에는 이 인 경우 serverInfo 객체가
optimizedPipeline
true
포함됩니다. 이전 버전의 MongoDB에서는optimizedPipeline
가true
일 때explain
결과에serverInfo
객체가 포함되지 않는 경우가 있었습니다. 이 기능은 버전 4.2.2, 4.0.14, 3.6.16에서도 사용할 수 있습니다.애그리게이션에 대한설명
nReturned
결과executionTimeMillisEstimate
db.collection.explain().aggregate()
에는executionStats
및 모드에서 메서드를 실행할 때 각 파이프라인 단계 에 대한 및allPlansExecution
필드가 포함됩니다.
팁
다음도 참조하세요.
comment
모든 데이터베이스 명령에 사용 가능한 옵션
MongoDB 4 부터 시작.4, 모든 데이터베이스 명령은 다음과 같은 방식으로 comment
필드 지정을 지원합니다.
예제
db.runCommand( { <command> , "comment" : <any BSON type> })
설정이 완료되면 다음 위치에서 명령 레코드와 함께 주석이 표시됩니다.
mongod 로그 메시지(
attr.command.cursor.comment
필드).데이터베이스 프로파일러 출력의
command.comment
필드에 있습니다.currentOp
{command.comment
5} 필드에 출력을 입력합니다.
주석은 유효한 BSON 객체 (문자열, 정수, 배열 등)여야 합니다.
위치 $
연산자 개선
MongoDB 4 부터 시작.4, 위치 $
연산자를 사용하는 경우 쿼리 문서와 프로젝션 문서 간에 서로 다른 배열 필드를 지정할 수 있습니다.
예를 들어 다음 문서를 컬렉션에 삽입하는 경우입니다.
db.foo.insertOne( { a: [ "one", "two", "three" ], b: [ 1, 2, 3 ] } )
MongoDB 4 부터 시작.4, 다음 쿼리를 사용하여 필드 a
에 지정된 쿼리와 일치하는 문서에 대해 b
필드의 첫 번째 요소만 프로젝션할 수 있습니다.
db.foo.findOne( { a: "one" }, { "b.$": 1 } )
중요
예상되는 동작을 보장하려면 쿼리 문서와 프로젝션 문서에 사용되는 배열의 길이가 동일해야 합니다. 배열의 길이가 다른 경우 특정 시나리오에서 작업이 오류를 일으킬 수 있습니다.
이전 버전의 MongoDB에서는 제한되는 배열 필드가 쿼리 문서에 나타나야 하기 때문에 이 작업이 실패했습니다.
호환성에 영향을 미치는 변경 사항
일부 변경 사항은 호환성에 영향을 줄 수 있으며 사용자가 조치를 취해야 할 수 있습니다. 호환성 변경 사항에 대한 자세한 목록은 MongoDB 4 의 호환성 변경 사항을 참조하세요.4.
업그레이드 절차
중요
기능 호환성 버전
4 에서 업그레이드합니다.2 배포, 4.2 배포에는 featureCompatibilityVersion
가 4.2
로 설정되어 있어야 합니다. 버전을 확인하려면 다음을 수행합니다.
db.adminCommand( { getParameter: 1, featureCompatibilityVersion: 1 } )
featureCompatibilityVersion
확인 및 설정에 대한 자세한 내용과 업그레이드를 위한 기타 전제 조건/고려 사항에 대한 정보는 개별 업그레이드 지침을 참조하세요.
4 으)로의 업그레이드에 대한 지침이 필요한 경우.4, MongoDB 전문 서비스 는 MongoDB 애플리케이션의 중단 없이 원활하게 전환할 수 있도록 주요 버전 업그레이드 지원을 제공합니다.
다운그레이드 고려 사항
MongoDB는 단일 버전 다운그레이드만 지원합니다. 현재 릴리스보다 이전 버전인 릴리스로 다운그레이드할 수 없습니다.
예를 들어 4 4 42을 다운그레이드할 수 있습니다. -series 를 로 설정합니다.4 2-series 배포. 그러나 해당 을 더 다운그레이드합니다.4 0에 시리즈 배포. -시리즈 배포는 지원되지 않습니다.
다운로드
MongoDB 4 을(를) 다운로드합니다.4, MongoDB 다운로드 센터 로 이동합니다.
팁
다음도 참조하세요.
알려진 문제
버전 | 이슈 | 상태 |
---|---|---|
4.4.0 | 서버-45042: Community 및 Enterprise용 MongoDB Server 설치 MSI에는 더 이상 MongoDB 데이터베이스 도구 용 바이너리가 포함되어 있지 않습니다. 자세한 내용은 도구 변경사항을 참조하세요. | 해결 되지 않은 |
4.4.0 | 서버-49694: 샤드 클러스터에서 nearest 읽기 또는 헤지된 읽기( hedged read )는 가까운 샤드 복제본으로 라우팅되지 않을 수 있습니다. | 4 에서 수정되었습니다.4.1 |
4.4.0 | WT-6623: 복구 파일 검사에서 연결 수준 파일 ID를 설정합니다. | 4 에서 수정되었습니다.4.1 |
이슈 신고하기
문제를 신고하려면 https://github.com/mongodb/mongo/wiki/Submit-Bug-Reports 를 참조하세요. MongoDB 서버 또는 관련 프로젝트 중 하나에 대한 JIRA 티켓을 제출하는 방법에 대한 지침을 참조하세요.