태터데스크 관리자

도움말
닫기
적용하기   첫페이지 만들기

태터데스크 메시지

저장하였습니다.

'Development/Database'에 해당되는 글 3건

  1. 2007/01/11 DBCP의 validationQuery는 왜 필요한가?
  2. 2007/01/08 DBCP의 validationQuery 약인가? 독인가?
  3. 2004/07/20 우편번호 입력용 SQL

전에 기록한 "DBCP의 validationQuery는 약인가? 독인가?"에서 validationQuery는 필수가 아니라고 했었다. 그렇다면 만약 DBCP에서 바라보고 있는 DB 서버가 어떠한 이유로 사용 불가 상태에 들어갔다가 다시 사용 가능해 진다면  validationQuery가 없어도 DBCP는 Connection Pool을 제대로 복구할까?

DBCP 공식 사이트에서 관련된 내용을 검색해 보니 DBCP는 검증기능을 사용하지 않는 경우에도 DB서버가 셧다운 되었다가 다시 기동되면 자동으로 새로운 Connection 객체들을 Pool에 로딩한다 한다.

단, DBCP의 프러퍼티를 기본값으로 설정되어 있고, 사용하는 JDBC 드라이버가 select 등의 쿼리 실행시 발생하는 예외상황에 대해 SQLException을 제대로 보고한다는 전제하에 굳이 validationQuery를 사용하지 않아도 된다고 한다. 적어도 최근 버전의 DBCP에서는 validationQuery는 돌다리도 두드려보는 개념인것 같다.  

다음은 DBCP사이트의 Wiki(http://wiki.apache.org/jakarta-commons/DBCP) 에서 확인한 내용이다.

Q: Without using validation of connections (testOnBorrow = false, testOnReturn = false, timeBetweenEvictionRunsMillis = -1) and after shutdown and restarting the database again, it looks like the pool is cleaning its old connections by itself. So it turns out that we always have valid connections. How can you explain this and when is explicit validation necessary?

A: During the connection activation (when borrowing a connection) the setAutoCommit and other connection init methods are called. If one of these methods throws a SQLException then the connection is also considered broken and removed from the pool.

So if you are using one of the "default*" properties and the JDBC driver correctly reports the SQLExceptions on the "set*" methods then you don't need an extra validationQuery.

크리에이티브 커먼즈 라이선스
Creative Commons License

'Development > Database' 카테고리의 다른 글

DBCP의 validationQuery는 왜 필요한가?  (0) 2007/01/11
DBCP의 validationQuery 약인가? 독인가?  (0) 2007/01/08
우편번호 입력용 SQL  (0) 2004/07/20
Posted by Alchemist™
현재 담당하고 있는 프로젝트와 Apache의 Commons에 있는 DBCP를 사용하여 구현된 Connection Pool 관리자로부터 Connection을 받아서 쓰고 있다. 그런데 DB 서버의 부하를 점검해 본 결과, 당연하게도 DBCP의 validationQuery로 할당한 SQL문의 호출이 가장 많았다.
솔루션의 성격상 DB 서버에 대한 Access가 빈번히 일어나고 그 응답 또한 빠른시간을 필요로하기 때문에 DB의 부하를 가능한 줄여야 하는데 DBCP에서 Connection 객체를 받아 올 때 마다 실행되는 validationQuery는 엄청난 부하를 야기하고 있었다. 값비싼 객체인 DB와의 Connection을 효율적으로 관리하여 DB 관련 프로세스의 효율을 높이고자 사용하는 DBCP가 아이러니하게도 DB 서버의 부담을 높이는 작용을 하고 있었던 것이다.
과연 validationQuery는 반드시 필요한가? DBCP의 API 문서를 확인한 결과, BasicDataSource의 Validation Query는 필수가 아닌 선택적인 기능으로서 할당되었을 경우에만 수행되는 것으로 나와 있다. 단, 이 기능을 사용하고자 할당한 경우에는 해당 쿼리의 실행결과 반드시 1개 이상의 resultset이 나와야 한다고 명시되어 있다.
만약 자신의 프로젝트에서 DBCP를 사용하고 있다면, 그리고 validationQuery를 설정하여 사용하고 있다면 해당 쿼리가 최경량의 SQL문을 사용하고 있는지 확인하는 것은 잊지 말아야 할 것이다.
추천되는 쿼리는 Oracle의 경우

select 1 from dual;

MySQL의 경우

select 1;

정도를 사용하면 좋을 것이다. 이외의 쿼리를 validationQuery로 사용 중 이라면 지금 당장 쿼리 실행 소요 시간을 비교해 보라. 

크리에이티브 커먼즈 라이선스
Creative Commons License

'Development > Database' 카테고리의 다른 글

DBCP의 validationQuery는 왜 필요한가?  (0) 2007/01/11
DBCP의 validationQuery 약인가? 독인가?  (0) 2007/01/08
우편번호 입력용 SQL  (0) 2004/07/20
Posted by Alchemist™
주소록 등에 사용하는 전국 우편번호 정보를 입력하기 위한 SQL문이 정리된 자료이다.
첨부된 파일을 다운로드 받아 압축을 풀면 post.sql 이라는 파일이 있는데 Oracle 데이터베이스를 기준으로 작성된 우편번호 테이블이다. Oracle을 사용하지 않는 경우에는 자신이 사용하는 DB에 맞게 적당히 수정하면 된다. 단, 테이블 네임과 필드 네임은 바뀌면 안된다.
나머지 파일들은 지역별로 우편번호를 입력하는 SQL 쿼리문 들이 들어있는 파일들이다.
여기서 post.sql을 통해 생성된 테이블에 우편번호 데이터를 입력하니 차례로 실행하면 된다.

나의 경우에는 간단하게 입력 프로그램을 작성해서 작업을 했었다.

첨부 : zipcode_sql.zip
크리에이티브 커먼즈 라이선스
Creative Commons License

'Development > Database' 카테고리의 다른 글

DBCP의 validationQuery는 왜 필요한가?  (0) 2007/01/11
DBCP의 validationQuery 약인가? 독인가?  (0) 2007/01/08
우편번호 입력용 SQL  (0) 2004/07/20
Posted by Alchemist™