2024년 8월 24일 토요일

JDBC Sender채널 대용량 사이즈 조회 시 메모리 상태나 처리방법 정리

스탠다드나 커스텀 JDBC어댑터에서 대용량 사이즈의 데이터를 조회할때 사이즈나 건수가 어느정도일때 메모리에 부하가 메커니즘이나 부하를 방지를 하기위한 방법을 정리해보려고 함

JDBC어댑터에서 대용량사이즈 조회 시 현상

  • 폴링되는 어댑터에서 대량 데이터로 인해 메모리 부족 오류가 발생될수 있음 → OutOfMemory발생
  • 많은 JAVA메모리를 사용하고 다운될수 있다고 함
  • 샌더 JDBC에서 큰 사이즈 수행 시 다음 실행하려는 프로세스나 연결풀링에 영향을 주는듯함 → 병목현상 및 트랜잭션 격리 수준에 따라 다른처리
  • Sender채널 폴링 시 lock을 생성하는데 실행중인 채널작업이 끝나면 unlock을 하고 그다음 폴링(스레드)를 실행되는것 같음 → 정확한건 아님 그래서 대용량 사이즈의 데이터를 조회 시 오랫동안 락을 잡고 있으면 좋지 않은 현상이 발생될수 있을것 같음

대용량 사이즈 해결을 위한 방법들

  • 서버 장비나 노드, 메모리 등에 따라 처리할수 있는 사이즈가 늘어날수 있는듯
    • 자바 힙 크기를 늘리는건 임시방편이라고 함 → 가비지 성능에 영향을 줄수 있다고 함
  • 타겟 프로시저를 통해 minRows, maxRows 같은 건수를 조절하여 리턴
  • 오라클은 ROWNUM, MSSQL은 TOP 구문으로 조회건수를 조절할수 있음
  • 어댑터가 잠기는 상태 대응으로 tasktimeout 변수 언급 → Send 큐 잠금에 영향이 없다고 하는데 정상적인 기능인지 모름
  • 조회테이블에 플래그를 지정하여 일부 레코드를 읽는 방법 → 플래그 등 조건이 없고 배치시간이 짧으면 부하를 줄수 있음
  • 조회 쿼리도 select * from table에서 *가 아닌 컬럼을 지정하여 조회
  • 대용량사이즈 처리가 아닌 방지를 위해 어댑터모듈 등 특정 큰 사이즈 채널에 유입시 강제 에러를 발생시킬수 있음
  • 최대메시지 크기로 설정 1296819 - Configuring Maximum Message Size Limits for OOM Error와 1253826 - Configuring Maximum Message Size Limits

전에 작성한 관련 글

댓글 없음:

댓글 쓰기

최근글

9월 태안~천안 아이와 3박4일 가족 여행지