기술지원 문의

[답변]DB상태에 따라서 컨넥션풀을 재생성할 수 있나요?
기술지원팀 / 2007-04-27 14:35

안녕하세요 기술지원팀 권용찬이라고 합니다.

 

문의하신내용은 잘 보았습니다.  일단.. 가능한 부분이라는 말씀을 드립니다.

가능한 것은 해당 DB 제품과 JDBC 드라이버에 따라 자동으로 재 연결되는 것이 있고

또는 Resin의 Config를 사용하여 재 연결할 수 있습니다.

그리고 성능을 위해서는 해당 설정을 하지 않을 것을 권장 드리는 바 입니다.

 

1. 먼저 알아서 접속되는것으로 예를 들면 mysql 5.x 버젼에 com.mysql.jdbc.Driver 를 사용하면 서버를 내렸다가 올리더라도 끊어진 연결이 다시 연결됩니다. 이부분을 위해 별도 작업을 해주실 필요가 없지요  

자세한 내용은 각 벤더사 JDBC 드라이버 정보...또는 직접 확인해 보시는 방법이 있겠습니다. ^^

 

2. Resin에 구성하기

JDBC Connection 처리는 WAS의 처리 성능에 지대한 영향을 미칩니다.

Resin에서 Connection 복구 방법은 일정시간마다 또는 Connection 사용전에 해당 접속이 정상적인지 확인하여 비정상이면 복구하고 정상이면 그냥 진행 하는 형태인데

JDBC Connection 정상여부 확인이라는 작업 자체가 부하가 있는 부분이기 때문에 실제 운영 서버등에는 적용하는 것을 권하지 않습니다.

 

만약 개발중이나 테스트를 위해 자주 DB를 내리고 올리신다면 다음과 같은 tag 정보를 사용하여 일정시간마다 connection확인을 통해서 DB Pool이 Connection을 복구 하실 수 있습니다.

 

      <database>
           <jndi-name>jdbc/mysql</jndi-name>
           <driver type=\"com.mysql.jdbc.Driver\">
             <url>jdbc:mysql://192.168.1.XXX:3306/solin</url>
             <user>solinbmt</user>
             <password>XXXX</password>
            </driver>
            <prepared-statement-cache-size>8</prepared-statement-cache-size>
            <max-connections>500</max-connections>
            <max-idle-time>60s</max-idle-time>
           <max-active-time>20s</max-active-time>
          <ping-table>\"SELECT 1 FROM tb_code\"</ping-table>
          <ping>true</ping>
          <ping-interval>60s</ping-interval>
          </database>

 

위의

<ping-table> 테그에는 connection 연결확인시 DB에 전송할 간단한 쿼리를 넣어주십시요 되도록  테이블에 내용이 적은 것으로 하시고 쿼리결과도 조금만 가져오도록 신경쓰십시요   이유는 ^^ 아시겠죠?

 

<ping>  기본 false 입니다. true로 설정합니다.

 

<ping-interval> 성능과 큰 관계가 있습니다. 기본값 60sec입니다. 이값을 줄이면 더 빨리 DB복구에 따른 connection 확인이 가능합니다. 그러나 부하는 증가합니다.

 

다시한번 말씀드리지만 이러한 구성은 개발환경이나 어쩔 수 없는 경우가 아니라면 설정하지 말 것을 권장합니다.

 

즐거운 주말 보내세욥~~~!!!