Docs Menu
Docs Home
/ /

재시도 가능한 쓰기

재시도 가능 쓰기를 사용하면 네트워크 오류 발생 후 또는 복제본 세트 또는 샤딩된 클러스터 에서 정상적인 프라이머리 찾을 수 없는 경우드라이버가 특정 쓰기 (write) 작업을 다시 시도할 수 있습니다.

재시도 가능 쓰기에는 다음이 필요합니다.

배포 토폴로지
복제본 세트 또는 샤딩된 클러스터.독립형 인스턴스에서는 지원되지 않습니다.
스토리지 엔진
WiredTiger 또는 인메모리와 같은 문서 수준 잠금 기능이 있는 스토리지 엔진 .
MongoDB 드라이버

MongoDB 3.6+와 호환되는 드라이버입니다.

Java 3.6+

Python 3.6+

C 1.9 이상

Go 1.8+

C# 2.5+

노드 3.0+

Ruby 2.5+

Rust 2.1+

Swift 1.2+

Perl 2.0+

PHPC 1.4+

Scala 2.2+

C++ 3.6.6+

MongoDB 버전
모든 노드의 MongoDB + 및 3.6 featureCompatibilityVersion 3.6+. 를 참조하세요.setFeatureCompatibilityVersion
쓰기 승인
쓰기 고려 가 0 있는 쓰기는 재시도할 수 없습니다.

트랜잭션 커밋 및 중단 작업을 다시 시도할 수 있습니다. 드라이버는 가 인 경우에도 오류가 발생하면 이러한 작업을 한 번 retryWrites false 재시도합니다.

트랜잭션 내부의 쓰기는 값에 관계없이 개별적으로 재시도할 수 retryWrites 없습니다.

트랜잭션에 대한 자세한 내용은 트랜잭션을 참조하세요.

MongoDB 드라이버
MongoDB 4.2 이상과 호환되는 드라이버는 기본적으로 재시도 가능 쓰기 를 활성화합니다. 이전 드라이버에는 retryWrites=true 옵션이 필요합니다. retryWrites=true 옵션은 MongoDB 4 와 호환되는 드라이버를 사용하는 애플리케이션에서 생략할 수 있습니다.2 이상.

재시도 가능 쓰기를 사용하지 않으려면 MongoDB 4.2 이상과 호환되는 드라이버를 사용하는 애플리케이션에서 연결 문자열에 retryWrites=false 포함해야 합니다.
mongosh

mongosh 은 기본값 으로 재시도 가능 쓰기를 활성화합니다. 비활성화하려면 를 사용합니다.--retryWrites=false

mongosh --retryWrites=false

MongoDB 쓰기 고려 (write concern) 승인한 경우 다음 작업을 재시도합니다( 예시: 쓰기 고려는 일 {w: 0} 수 없음).

참고

트랜잭션 내부의 쓰기는 개별적으로 재시도할 수 없습니다.

방법
설명

삽입

단일 문서 업데이트

단일 문서 삭제

findAndModify 작업(항상 단일 문서).

db.collection.bulkWrite() 다음 쓰기 작업을 사용합니다.

단일 문서 쓰기 작업으로만 구성된 대량 쓰기 작업입니다. 재시도 가능한 일괄 작업에는 지정된 쓰기 작업의 모든 조합이 포함될 수 있지만 updateMany 등의 다중 문서 쓰기 작업은 포함될 수 없습니다.

단일 문서 쓰기 작업으로만 구성된 대량 쓰기 작업입니다. 재시도 가능한 대량 작업은 지정된 쓰기 작업의 어떤 조합도 포함할 수 있지만, multi 옵션에 true가 지정된 update 와 같은 다중 문서 쓰기 작업은 포함할 수 없습니다.

MongoDB 쓰기를 번 재시도합니다. 이는 일시적인 네트워크 오류 및 복제본 세트 투표를 해결하지만 지속적인 네트워크 오류는 해결하지 못합니다.

드라이버는 serverSelectionTimeoutMS 재시도하기 전에 동안 새 프라이머리 찾습니다. 페일오버 이 제한 시간보다 오래 걸리면 재시도 가능 쓰기가 실패합니다.

경고

클라이언트 이상 응답하지 않으면 쓰기 (write) 재시도되고 클라이언트 복구될 때 다시 적용 수 localLogicalSessionTimeoutMinutes 있습니다.

serverStatus 에는 섹션에 재시도 가능한 쓰기 (write) 통계가 포함되어 있습니다.transactions

공식 드라이버는 기본값 으로 재시도 가능 쓰기를 활성화 .local 재시도 가능 쓰기를 비활성화하지 않으면 데이터베이스 에 대한 쓰기가 실패합니다.

비활성화하려면 연결 문자열 에서 retryWrites=false를 설정하다 .

MongoDB 6.1부터 재시도 가능한 쓰기의 첫 번째와 두 번째 시도가 모두 단일 쓰기를 수행하지 않고 실패하면 MongoDB는 NoWritesPerformed 라벨과 함께 오류를 반환합니다.

NoWritesPerformed 라벨은 insertMany()과 같은 배치 작업의 결과를 구분합니다. insertMany 작업에서는 다음 결과 중 하나가 발생할 수 있습니다:

결과
MongoDB 출력

문서가 삽입되지 않습니다.

NoWritesPerformed 라벨이 있는 오류 반환.

부분적인 작업이 완료되었습니다. (문서가 하나 이상 삽입되지만 모두 삽입되지는 않습니다.)

NoWritesPerformed 라벨 없이 오류가 반환.

모든 문서가 삽입됩니다.

성공 반환.

애플리케이션은 NoWritesPerformed 라벨을 사용하여 문서가 삽입되지 않았음을 확실하게 확인할 수 있습니다. 이 오류 보고를 통해 애플리케이션은 재시도 가능한 쓰기를 처리할 때 데이터베이스의 정확한 상태를 유지할 수 있습니다.

이전 버전의 MongoDB에서는 재시도 가능한 쓰기의 첫 번째 시도와 두 번째 시도가 모두 실패하면 오류가 반환되었습니다. 그러나 쓰기가 수행되지 않았음을 나타내는 구분은 이루어지지 않았습니다.

재시도 가능한 읽기

돌아가기

대량 쓰기

이 페이지의 내용