문제 발견

WebMethods에서 Jdbc Adapter를 사용할 때 데이터 갱신을 위해 look up을 진행하는데
이 때문에 연결 상태가 안 좋은 DB에서 작업을 할 때 마우스 클릭 한번 할 때마다 developer가 뻗는 증상이 발생하였다.

해당 증상은 짧으면 20초 길면 20분 가까이 지속되며 지속되는동안 developer인 이클립스는 응답 안 함상태가 되고
IS 페이지에서 해당 Adapter를 끄면 developer가 에러를 뱉으면서 작업을 진행할 수 있게 된다.
즉 DB연결이 문제가 되어 이클립스도 응답 없음 상태에 들어간 것이다.

Adapter생성 버튼 누르면 DB 정보 필요해서 lookup
스키마 선택하면 테이블 정보 필요해서 lookup
테이블 선택하면 칼럼 정보 필요해서 lookup
입출력 데이터 한 개 추가 삭제할 때마다 lookup
gui툴에 자동화로 해주다 보니 모든 일을 진행할 때 동기화를 위해 계속 lookup을 반복하고 이상태 면 개발이 불가능하다.

그래서 지금 상태를 상대가 클라우드에 있기 때문에 인터넷 연결 상태가 원활하지 않다고 생각하기보다는
해결 방법을 찾기로 했다. 

문제 해결

오랜 구글링 끝에 같은 증상을 발견하였고
답변에 나온 데로 따라 하니 이상 증상이 해결되었다.
http://tech.forums.softwareag.com/techjforum/posts/list/47077.page

Outher Properties 세팅

IS서버 webMethods Adapter for JDBC에 등록된 DB Adapter 중 문제 있는 jdbc어답터에  
Other Properties 항목에 아래와 같은 명령어를 입력해주면 해결된다.
driverType=thin;oracle.jdbc.TcpNoDelay=true;restrictGetTables=true;TCP.NODELAY=yes

입력된 명령어를 보면 주요 명령어는 Tcp NoDelay인데 해당 내용에 대해 조사해보니
TCP 네트워크 알고리즘인 Nagle을 사용 안 하는 명령어이다.

Nagle알고리즘은 대용량 전송에 유리하도록 데이터를 캐시에 쌓아두고 일정 크기 이상이 되면 한 번에 전달하여 한번에 Ack를 받는 알고리즘인데 어째서인지 JDBC Adapter가 이것 때문에 전송이 안되고 있다 timeout 떨어지거나 전송 데이터가 늘어 캐시를 채우면 전송되니 짧으면 30초 길면 20분까지도 프리즈 됐던 것이 아닐까 추측하고 있다.

 

추가 정보

restrictGetTable에 경우엔 아직 설명을 봐도 잘 모르겠다.
그래서 해당 api에 대한 부분을 가져와 보았다.
다만 설명해서 말하는 내용이 어떤지는 정확히는 모르지만
true로 세팅하면 안전성을 얻는 대신 성능 저하가 있는 api가 아닐까...

사실 영알 못에 DB알못이라 잘 모르겠습니다. 

restrictGetTables String (containing boolean value) "true" causes JDBC to return a more refined value for DatabaseMeta.getTables(). By default JDBC will return things that are not accessible tables. These can be non-table objects or accessible synonyms for inaccessible tables. If this property is "true", JDBC returns only accessible tables. This has a substantial performance penalty.

출처:  https://docs.oracle.com/cd/B13789_01/java.101/b10979/basic.htm

+ Recent posts