연결 풀 설정 조정하기
이 페이지의 내용
문제 | 솔루션 |
---|---|
데이터베이스 서버 로그 또는 실시간 패널에 반영되지 않는 느린 애플리케이션 측 작업 시간입니다. |
예를 들어 멤버의 지연 시간이 10,000밀리초인 경우, |
잘못 구성된 방화벽이 소켓 연결을 올바르지 않게 닫으며, 드라이버는 연결이 제대로 닫히지 않았음을 감지할 수 없음 | 소켓이 항상 닫혀 있도록 하려면
|
서버 로그 또는 실시간 패널에 애플리케이션이 새 연결을 생성하는 데 너무 많은 시간을 소비한다는 것이 표시됨 | 시작 시에는 사용 가능한 연결 수가 충분하지 않습니다. minPoolSize를 시작 시 사용하려는 연결 수로 설정합니다.
|
데이터베이스의 로드가 적고 항상 활성 연결 수가 적으며, 애플리케이션이 항상 한 번에 예상보다 적은 수의 작업을 수행함 | maxPoolSize를 늘리거나 애플리케이션 또는 사용 중인 프레임워크에서 활성 스레드 수를 늘립니다. |
데이터베이스 CPU 사용량이 예상보다 높고, 서버 로그 또는 실시간 패널에 예상보다 많은 연결 시도가 표시됨 | maxPoolSize를 줄이거나 애플리케이션의 스레드 수를 줄입니다. 이렇게 하면 로드 및 응답 시간을 줄일 수 있습니다. |
경고
서버 작업이 오래 실행되는 것을 방지하려면 socketTimeoutMS
를 사용하지 마세요. 대신 서버가 장기 실행 작업을 취소할 수 있도록 쿼리와 함께 maxTimeMS()
를 사용하세요.
최대 연결 수 계산
사용량을 계산하여 각 연결에 대해 실행 중인 작업 수를 찾습니다.
세 명의 멤버가 있는 복제본 세트에 연결하는 애플리케이션 서버를 생각해 보겠습니다. 이 시나리오에서 애플리케이션 서버는 각 복제본 세트 멤버에 대한 연결 풀을 생성합니다. 또한 각 노드의 각 클라이언트가 모니터링을 위해 생성하는 연결도 고려해야 합니다.
애플리케이션 서버에서 열 수 있는 최대 연결 수는 maxPoolSize
, 멤버 수, 각 멤버의 모니터링 및 RTT 연결에 따라 결정됩니다.
예를 들어, 다음 공식을 사용하여 애플리케이션에서 세 멤버로 구성된 복제본 세트로 향하는 발신 연결을 계산할 수 있습니다.
( **100** {:urioption:`maxPoolSize`} + **1** monitoring connection + **1** RTT connection ) * 3 replica set members = **306** outgoing connections from the application.