서버  : 리눅스
DB : MySQL
프로그램 : 델파이(ADO 사용)

해결책 1:  my.cnf 파일에서 설정을 추가하는 방식인데 

[mysqld]
datadir=/var/lib/mysql
Socket=/var/lib/mysql/mysql.sock
default-character-set=euc-kr
skip-name-resolve         <- 이부분 추가~~

[mysql.server]
user=mysql
basedir=/var/lib
.
.
.


my.cnf 에서 skip-name-resolve 옵션을 추가하는 방법인데.. 일단 안됐음.. 

해결책 2 : max-allowed-packet 설정값을 증가 시킨다

해결책 3 : wait-time-out 설정값을 증가 시킨다
(이 설정값이 늘려 볼려고 했으나, 호스트 서버에 부하가 많다는 이유로 요청하는 값까지는 올리지 못함 고로~ wait-time-out의 값을 요청하는 값까지 올린 경우를 생각을 못하였지만 서버를 외부에 두고 할 경우에는 이 설정을 변경하는 게 쉽지는 않을 것 같같다 왜냐하면 서버를 우리회사에서만 쓰는게 아니므로....)

해결책4 : 프로그램 내부의 connection 설정 값을 증가 시킨다.
(ADO connection에 관련된 값을 증가 하여도 DB의 설정값으로 인해서 연결이 끊긴다)

해결책 4번까지를 적용 해보았으나, 결국에는 해결이 되지 않았다

위의 에러가 뜨는 상황을 조사해본 결과 한번 connection을 맺고 나서 30초가 지난 후에 연결이 끊기는 것을 확인하였다.

결국에는 wait-time-out의 설정값의 시간이 지나기 전에 쿼리를 날려서 connection을 유지하는 방법으로 문제 해결

개발 환경은 델파이인데 타이머를 돌려서 interval을 25000으로  줘서 연결을 유지한다.

다만 문제는 서버에 부하가 가지 않을 정도의 interval값을 산출하는 것..;;

그리고 쿼리를 날리는 테이블은 레코드가 별로 없는 것으로 추천! 

wait-time-out의 기본 값은 30초 이다!


+ Recent posts