2017-05-20 3 views
4

일반적 here매번 새로운 연결을 열 때보 다 많은 개방 된 연결의 연결 풀이 시스템에 비해 비용이 적게 드는 이유는 무엇입니까?

의 답변은 데이터베이스 연결을 여는 연결 나중에 요청 활성들 중 하나 일 때 우선적으로 사용하고, 그래야 풀링 연결 활성 유지 비용이 많이 드는 작업이다 ~ 다른 하나를 여는 중입니다.

DB 관리에서 Connection Pool의 개념을 이해합니다. 그 대답은 "~"입니다. 모든 개발자 블로그 게시물, 답변, 자습서, DB 문서는 항상 "무엇입니까"질문에 대한 답변. 마찬가지로 그들은 서로간에 텍스트를 복사/붙여 넣기합니다. 아무도 "왜 그런가?" "및"how "을 설명하려고 시도하지 않습니다. 위의 대답은 그 예입니다.

나는 이해할 수 없다 이유방법가 풀에, 말하자면, 30 개 연 연결을 유지하기가 필요한 경우 새 연결을 열 것보다 시스템에 대한 비용이 덜 드는 것으로 가능하다.

웹 서버가 호주에 있다고 가정합니다. 오레곤 어딘가의 미국에있는 AWS의 DB입니다. 또는 GB. 또는 AUS와는 아주 멀리 떨어져 있지만. 그래서 모든 사람들은 20 -... 열어 놓은 연결을 유지하는 것이 매번 새로운 연결을 열 때보 다 메모리와 시스템 성능에 덜 비쌀 것이라고 말합니다. 그것이 어떻게 될 수 있는가? 왜?

+2

연결을 설정하려면 끝점, 메모리 할당 등 사이의 통신 (생각해 내기)이 필요합니다. 또한 DB 상호 작용을 수행하기 위해 루프를 수행하는 경우 동일한 활성 연결을 다시 사용하는 것이 훨씬 낫습니다. 루프 내에서 열고 닫음; 하나의 연결을 만들기위한 작은 차이가있을지라도 루프 내에서 증가합니다. –

+2

그린, 그게 무슨 가치가 있는지, 나는이 질문을 묻는 답변에 추가 정보를 추가했습니다 : http://stackoverflow.com/questions/4041114/what-is-database-pooling/4041136#4041136을 참조하십시오. 그러나 Mitch와 Maria는 기본적으로 옳았습니다. 연결을 설정하는 것은 즉각적인 과정이 아닙니다. – paxdiablo

답변

3

시나리오에서 가장 큰 문제는 네트워크 대기 시간입니다. 두 대륙에 위치한 서버 간의 통신이 특히 빠를 것으로 기대할 수는 없습니다. 따라서 매번 새로운 연결을 시작하면 매번이 대기 시간이 발생합니다.

here에서

: 데이터베이스 서버에 연결

은 일반적으로 몇 시간이 걸리는 단계로 구성됩니다. 소켓 또는 명명 된 파이프와 같은 물리적 채널을 설정해야하며 서버와의 초기 핸드 셰이크는이어야하며 연결 ​​문자열 정보를 구문 분석해야하며 서버에서 연결을 인증해야하며 다음을 수행해야합니다. 현재 트랜잭션, 등등. 웹 서버와 데이터베이스 사이의 연결이 SSL/TLS를 사용하는 경우

또한, ocurrs 그 정상 핸드 쉐이크 (자료 발생할 수있는 실제 통신하기 전에 모든 새 연결에 을 수행해야합니다 악수가있다 정상 연결에서). 이 악수는 시간면에서 비싸다. here에서

: 클라이언트와 TLS를 통해 응용 프로그램 데이터를 교환 시작할 수있는 서버 이전

는 암호화 된 터널을 협상해야합니다 클라이언트와 TLS 프로토콜의 버전에 동의해야 서버가 선택 ciphersuite를 만들고, 필요한 경우 인증서를 검증하십시오. 불행하게도이 단계들 각각은 클라이언트와 서버간에 새로운 패킷 라운드 트립을 필요로하므로 모든 TLS 연결에 시동 대기 시간이 추가됩니다. (...위의 교환이 있듯이), 새로운 TLS 연결하면 연결 풀링을 사용하는 경우, 이러한 오버 헤드는 정기적으로 '핑 (ping)처럼 뭔가를 보내 피할 수

나쁜 소식을 하시면서는 "전체 핸드 쉐이크"두 왕복이 필요 '메시지를 때때로 SQL 서버에 보내서 비활성으로 인해 시간 초과로 인한 연결을 피할 수 있습니다. 물론 이것은 서버에서 더 많은 메모리를 소비 할 수 있지만 요즘은 훨씬 저렴한 리소스입니다. 네트워크의 지연은 피할 수 없습니다.