연결 관리
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)
currentOp및killOp을 실행하려면 관리자 권한이 필요합니다.
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 | 연결이 닫히기 전까지 유휴 상태를 유지할 수 있는 기간입니다. |