ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 웹 운영 회사 취업 후 신입 이야기
    웹 운영 2019. 12. 24. 19:14
    반응형

    취업 후 바쁜 신입으로의 회사 생활로.. 블로그가 소홀하다는 거에 반성합니다..(스스로에게 ㅎㅎ)

    취업 후에도 꾸준히 글을 올리겠다던 다짐과는 반대로 ....

     

    오늘은 신입 6개월 동안 웹 상에서의 기능 추가, 혹은 기능 개선으로 매주 반영해오고 있던 차 블로그에 글을 적고 싶은 내용이 생겨 오랜만에 방문하였다.

    회사에 매일매일 일 배치로 돌리는 배치 소스를 만들어 반영하였고, 만든 배치 작업을 매일 새벽 3시 배치스케쥴 설정하였다.

    반영 후 다음날 아침에 출근하자마자 사수인 대리님께서....

    "배치 오류났다 로그 체크해봐~~" 하셨고,, 배치가 잘 돌았을 거라는 기대감은,,, 민망함과,, 스스로에 대한 실망감으로 돌아왔고 바로 로그를 확인해보았다. ㅎㅎ

    !! ORA-01000 :  최대 열기 커서 수를 초과했습니다. !!!

    두둥..

    빨리 복사해 구글링...

    JDBC는 직접 Connection, PreparedStatement 생성, close() 필요,,,

    MyBatis는 내부적으로 자동으로 Connection, PreparedStatement 생성 및 close()...

    ....PreparedStatement를 close 해주지 않아서 생기는거라고 대부분의 구글링 결과...

    Mybatis는.. 자동적으로 close 된다는데.. 손댈 수가 있는건지.. 멘붕이었다..

     

    일단 DB 최대 허용 커서 수를 파악해보니 500개... 내가 생성하고 close한 PreparedStatement 는 512개... 데이터가 많아서 생기는 문제인걸까.. 꼭 데이터가 많아서 생기는 문제라기보다 데이터를 처리하는 PreparedStatement가 많아서 생기는 문제다. (10만건의 데이터도 10개 미만의 PreparedStatement 로 처리가 가능하기 때문이다.)

     ** 현재의 환경에서 짜여진 소스를 수정하여 테스트해보니.. 500개 미만의 PreparedStatement가 생성되는 프로세스는 정상 처리가 된다.

    DB 최대 허용 커서 수를 늘려도 되지만, 이건 원초적인 문제해결 방법은 아니라고 생각을 하였고, PreparedStatement를 적게 생성해 데이터를 처리해야하는데.... 한 For문 안에 실행해야할 쿼리문은 8개.... 말이안된다...

    문득,  preparedStatement의 실행시기,, close되는 시기가 궁금해졌고, 공부도 할겸 가이드, API 등 많이 찾아보았다.

    (공부는 됬지만.. 오류 해결은 못한..)

    결국 해결은 한 For문 안에 있는 8개의 쿼리문을 다 분리시켜 각각 실행시켰고,, 8개의 PreparedStatement 가 생성되며 정상 실행되었고,,,, 임시 마무리를 하였다...

    *** 저는 이 블로그의 글을 보신 후 신입에게 도움 주실 고수분이나 같은 고민을 가졌고 해결하신분의 조언을 기다립니다. ***

    반응형

    '웹 운영' 카테고리의 다른 글

    GC Overhead Limit Exceeded 발생..  (0) 2022.03.01
    웹 서버에 설치된 MPM 확인  (0) 2021.03.27
    DNS  (0) 2020.03.07
    ISMS - Information Security Management System 심사 후기  (0) 2020.02.28
    데브옵스란..  (3) 2020.02.07
Designed by Tistory.