연결 관리

Databases for MongoDB 배치에 대한 연결은 리소스를 사용하므로 배치의 성능을 튜닝할 때 필요한 연결 수를 고려하는 것이 중요합니다. MongoDB 셸 또는 MongoDB 클라이언트에서 다음 명령을 사용하여 허용되는 최대 연결 수와 현재 사용량을 표시합니다.

  db.serverStatus().connections

샘플 출력:

{
  current: 33,
  available: 65503,
  totalCreated: 21858,
  rejected: 0,
  active: 9,
  threaded: 33,
  exhaustIsMaster: 0,
  exhaustHello: 6,
  awaitingTopologyChanges: 6
}
필드 의미
current: 33 유휴 연결을 포함한 총 현재 클라이언트 연결 수입니다. 현재 연결된 클라이언트 수입니다.
available: 65503 제한에 도달하기 전에 허용할 수 있는 추가 클라이언트 연결 수( MongoDB )(최대 ~65536)입니다.
totalCreated: 21858 서버가 시작된 이후 생성된 총 연결 수입니다. 연결 이탈을 이해하는 데 도움이 됩니다.
rejected: 0 제한에 도달하여 거부된 연결 시도 횟수입니다.
threaded: 78 현재 연결을 처리하는 스레드 수입니다. 종종 일치합니다 current.
active: 23 현재 작업을 실행 중인 연결 수 - 나머지(78 - 23 = 55)는 유휴 상태입니다.
exhaustIsMaster: 0 이전 서버 검색 프로토콜 관련(현재는 대체됨). 보통 0입니다.
exhaustHello: 19 영구 모니터링 연결(예: 모니터링에서 hello 명령을 사용하는 드라이버로부터의 연결).
awaitingTopologyChanges: 19 토폴로지 변경을 기다리는 연결(예: 복제본 세트의 고가용성 모니터링을 위한 연결).

참고:

  • maximum connection = current + available
  • 연결이 거부되지 않았다는 것은 한도에 도달하지 않았다는 뜻입니다.
  • 기본적으로 MongoDB 은 최대 65536 개의 연결을 허용합니다.
  • 배치에 대한 연결 한계를 초과하면 애플리케이션에서 데이터베이스에 연결하지 못하게 될 수 있습니다.

MongoDB 연결 종료

MongoDB 연결을 종료(종료)하려면 일반적으로 MongoDB 셸을 통해 다음 방법을 사용합니다: 다음 명령을 실행하여 연결을 포함한 활성 작업을 나열합니다.

  db.currentOp(true).inprog

출력:

{
  "client" : "IP:PORT",
  "active" : true,
  "opid" : <opid>,
  ...
}

opid 작업(예: opid: 12345)을 찾으면 다음 명령을 사용하여 해당 작업을 종료합니다:

    db.killOp(12345)
  • currentOpkillOp 을 실행하려면 관리자 권한이 필요합니다.

MongoDB 연결 풀링

MongoDB 의 연결 풀은 애플리케이션과 MongoDB 서버 간에 재사용 가능한 연결의 캐시입니다. 애플리케이션은 모든 요청에 대해 새 연결을 열고 닫는 대신(비용이 많이 듭니다), 연결 풀을 유지하여 여러 작업에 재사용합니다. 연결 한계를 초과하지 않도록 방지하고 애플리케이션으로부터의 연결이 효율적으로 처리되도록 하는 한 가지 방법은 연결 풀링을 사용하는 것입니다. 드라이버는 수요와 구성에 따라 연결의 생성, 재사용, 종료를 관리합니다.

Node.js (몽구스 또는 기본 MongoDB 드라이버):

mongoose.connect(uri, {
  maxPoolSize: 100,      // default is 100
  minPoolSize: 10,
  maxIdleTimeMS: 30000,
  serverSelectionTimeoutMS: 5000
});

Python (PyMongo):

client = MongoClient(uri, maxPoolSize=100, minPoolSize=10)

Java:

MongoClientSettings settings = MongoClientSettings.builder()
    .applyToConnectionPoolSettings(builder ->
        builder.maxSize(100).minSize(10).maxConnectionIdleTime(30, TimeUnit.SECONDS))
    .build();
기간 설명
maxPoolSize (또는 maxConnectionsPerHost) 풀이 MongoDB 서버에 열 수 있는 최대 연결 수입니다.
minPoolSize 풀에서 유지되는 최소 연결 수입니다.
waitQueueTimeoutMS 모두가 사용 중일 때 애플리케이션이 풀에서 연결을 기다리는 시간입니다.
maxIdleTimeMS 연결이 닫히기 전까지 유휴 상태를 유지할 수 있는 기간입니다.