by 냉동닭 [Oracle 에러코드] ORA-04031 JAVA 19c [2022.03.16 18:00:04]
서비스 운영하면서 기존 JAVA프로그램을 통한 오라클DB 추출하던 중 에러가 발생해서 찾다가 포기하여 이렇게 도움을 청합니다.
기존 JAVA소스는 변경된 것 없이 오라클 11g에서 19c로 변경된 적이 있었습니다.(JAVA버전은 19c에 맞게 1.8버전으로 업그레이드했습니다.)
11g에서는 잘 추출되던 부분이었는데, 19c로 넘어온 후 특정JAVA프로그램을 추출하다보면 안정적으로 메모리가 유지되다가 특정 라인을 부분에서 large pool 메모리가 쌓여 ORA-04031에러를 뱉어내고 세션이 끊기더군요.
※ 같은 유형의 JAVA프로그램에서 이보다 훨씬 큰 데이터들은 잘 추출됩니다.
이 부분에 대해서 pool메모리가 낮아서 발생하는 부분은 아닌 걸로 보이는데, 오라클의 특정블록이 11g->19c 업그레이드 되면서 깨진 건 아닌지 의문이 듭니다.
현재 pool메모리의 현황은 아래와 같습니다.
component current_size min_size max_size
shared pool 21609054208 19327352832 21609054208
large pool 67108864000 939524096 32078036992
java pool 939524096 268435456 939524096
해당 내용에 대한 원인은 어떻게 파악해야할까요..
도움주실 수 있는 분은 댓글에 답변 부탁드립니다..ㅠ
댓글이 없어서 ... 정확한 정보와 지식은 아니지만 경험에 의한 답변이라도 드려볼께요.
저같은 경우 11g -> 19c로 변경 후 몇몇 Package가 많은 메모리를 사용하는것을 확인하여서 확인해본 결과 아주 많은 단계에 걸쳐서 작업이 진행되었고
해당 작업들은 모두 Hard Parsing 되는것을 확인하였습니다.
하여 해당 작업들의 메모리 사용량을 줄이기 위해 중간 중간 Temptable을 생성하여 작업 단계별 중간 결과물을 Temptable에 담아 처리하였더니 어느정도는 해소 되었습니다.
11g -> 19c로 변경하면서 발생한 문제인지 아니면 데이터량이 늘어서 인지는 끝까지 확인하지 못하고 이직을해서 제가 수정했던 경험 바탕으로 공유드려요.
조금이나마 도움이 되었으면 합니다.