2011-01-30 4 views
0

제 경우는 [지금] 한 번만 MySQL 서버에 연결하고 연결을 유지하는 응용 프로그램을 java로 만든 것입니다. 그것은 다시 보내려고 시도 할 때 무작위로 MySQL의 쿼리를 전송하고 그것을 단일 쿼리를 전송하지 않고 많은 시간을 머물 수, 다음, JDBC는 말한다 :MySQL 서버에 자주 연결을 끊고 다시 연결해야합니까?

com.mysql.jdbc.exceptions.jdbc4.CommunicationsException : 서버에서 성공적으로받은 마지막 패킷은 60314 초 전이었습니다. 서버에 마지막으로 보낸 패킷은 60314 초 전이었으며 서버 구성 값인 'wait_timeout'보다 길었습니다. 응용 프로그램에서 사용하기 전에 연결 유효성을 만료 및/또는 테스트하거나, 클라이언트 시간 초과에 대한 서버 구성 값을 늘리거나 Connector/J 연결 속성 'autoReconnect = true'를 사용하여이 문제를 방지해야합니다.

그리고 내가 마음에 많은 솔루션이 있습니다 - 설정이 '사실'에 autoReconnect 속성과 다시 연결 -/응용 프로그램이 쿼리를 수행 [하지만 그것도 두 번째로 많은 쿼리를 만들 수 있습니다] 마다 분리 연결 시간 초과가되면. Personality 나는 2 등을 좋아한다. 하지만 내 질문이 튀어 나오는 때가 있습니다. 짧은 연결을 권장합니까? 또는 그것은 정말로 중요하지 않습니까? 왜 MySQL 서버는 wait_timeout 속성을 유지합니까?

+0

독립 실행 형 애플리케이션 (예 : 스윙) 또는 서버 측 애플리케이션 (예 : tomcat에서 실행되는 애플리케이션)입니까? – cherouvim

+0

그것은 서버 쪽입니다. 답변 해 주셔서 감사합니다. 사용하겠습니다 :) – olivarra1

답변

1

연결 처리를 연결 풀로 남겨 두는 것이 가장 좋습니다. 살펴보기 http://sourceforge.net/projects/c3p0/

+0

이 답변에 올라있는 사람들을 위해 [HikariCP] (http://brettwooldridge.github.io/HikariCP/)를 살펴보십시오. C3P0에 비해 많은 개선이있었습니다. –

1

연결 풀은 하나의 대답 일 수 있지만 응용 프로그램에 따라 다릅니다.

논리적 세션에 길이가 합당한 경우 논리적 세션 (예 : 웹 요청 또는 이메일 메시지)에 연결 범위를 지정하는 것이 좋습니다.

새로운 "논리적 세션"의 시작 부분에 새 연결을 열어 사용하면 버려집니다. 다른 세션에서 "불량"또는 "끊어진"연결의 영향을 최소화하기 때문에 버려집니다.

그러나 대부분의 경우 개별 작업마다 연결을 갱신하지 않으려합니다. 일부 시나리오에서는 이것이 유효한 전략 일 수 있습니다.

연결 풀은 일반적으로 사용 사이의 연결을 올바르게 재설정하지 않습니다 (MySQL에서이 작업을 수행하는 올바른 방법은 com_change_user 패킷을 전송하는 것으로 거의 지원하지 않는 소수의 응용 프로그램과 그로 인해 알 수있는 응용 프로그램이 거의 없음) 사용자가 재현 할 수없는 버그를 일으킬 수 있습니다.

관련 문제