2014-11-25 3 views
0

ORM 구현과 연결 풀링 및 ebean으로 c3p0을 사용하고 있습니다.mysql에서 쿼리 시간 초과가 c3p0을 통해

minPoolSize 
maxPoolSize 
maxIdleTime 
preferredTestQuery 

을하지만 난 쿼리가 다음 200 개 이상의 밀리 초를 촬영하기 무한히 그것을 기다리는 것보다 포기하는 경우 즉 가정 쿼리에 대한 시간 제한을 설정하는 방법을 방황 : 현재 내가 C3P0 풀에 등록 이하로 설정하고있다. 어떻게 c3p0를 통해이 목표를 달성 할 수 있습니까? 나는 일반 JDBC (예 : Statement.setQueryTimeout())로 설정하는 방법을 알고 있지만 c3p0을 통해 동일한 작업을 수행하는 방법을 알고 있습니다. 아니면 다른 방법이 있습니까?

maxIdleTime이고 검색어 대기 시간은 내가 말한 쿼리 시간 초과가 동일한 경우 즉, 특정 기간이 지난 후에 응답을받지 못하면 연결을 죽입니까? 미리 감사드립니다.

답변

1

아니요, maxIdleTime은 쿼리를 실행할 수있는 기간과 아무 관련이 없습니다. 연결이 만료되고 파기되기 전에 풀에서 유휴 상태로 유지되는 기간을 정의합니다.

c3p0은 일반 JDBC입니다. JDBC 사양에 따라 투명 연결 풀링을 제공합니다. Transparent는 API가 변경되지 않는다는 것을 의미하며, 코드는 기본적으로 풀의 유무와 동일해야합니다. 다른 서술문과 마찬가지로 c3p0 관리 연결에서 파생 된 명세서에 Statement.setQueryTimeout()으로 전화를 걸 수 있습니다.

일반적으로 c3p0은 연결이 체크 아웃되는 동안 연결을 방해하지 않습니다. 클라이언트 응용 프로그램이 Connection을 사용하고 나면 c3p0은 클라이언트 응용 프로그램이 수행하는 작업을 관찰하지만 그리 복잡하지는 않습니다. 가장 큰 예외는 구성 매개 변수 unreturnedConnectionTimeout으로, 연결 유출을 디버그하거나 해결하는 데 도움이됩니다. [here] 실제 상황에서 unreturnedConnectionTimeout을 사용하여 원하는대로 할 수 있습니다. 느린 쿼리를 포기하도록 강요하지만 다소 잔인합니다. unreturnedConnectionTimeout은 설정된 시간이 지나면 되돌아 가지 않은 Connection을 강제 종료하고 풀은 대개 대체품을 가져와야합니다. 그래도`unreturnedConnectionTimeout '을 시도하기 전에 Statement.setQueryTimeout으로 시작하겠다.