JDBC, DBCP, DBMS 라이브러리 캐싱 관련 질문드립니다. 0 0 2,510

by 동네시비꾼 [Oracle Tuning] Oracle JDBC DBCP SharePool [2021.04.06 17:18:59]


Apache Commons DBCP 관련 사항을 정리하다 개념이 헷갈려서 질문드립니다.

많은 분들에게 도움을 요청합니다.  관심 부탁드리겠습니다!!

 

질문

1. Apache Commons DBCP의 PreparedStatement Pooling과 관련 없이, DBMS 서버 자체적으로 커서를 라이브러리 캐시에 캐싱(커서 생성?)하지 않나요?

2. Apache Coommons DBCP의 PreparedStatement Pooling을 사용하면 DB 커서가 열린상태가 유지됩니다. DBMS 서버가 자체적으로 커서를 캐싱하는 것과는 다른건가요?

3. PreparedStatement Pooling과 라이브러리 캐싱(SQL 소프트 파싱을 위한) 의 관계? 차이점? 이 궁금합니다.

4. 제가 서술한 아래 키워드의 설명에서 틀린 부분 교정부탁드립니다.

 

위와 같은 질문이 생긴 이유는 아래의 키워드의 개념이 짬뽕이되어 헷갈린 것 같습니다(교통 정리가 안 된것 같습니다.).

키워드: 커서, 바인드 변수, PreparedStatemet Pooling(DBCP), 라이브러리 캐시

 

제가 위의 사항을 정리하면 다음과 같습니다(4번 질문, 틀린 부분 교정 부탁드리겠습니다..!!).

PreparedStatement를 통해 바인드 변수를 사용할 수 있다.
바인드변수를 통해 DBMS 라이브러리 캐시(shared-pool)의 공유할 수 있는 커서를 생성한다. 
이렇게 생성한 커서들을 통해 SQL 실행계획을 공유할 수 있다. 
   SQL 실행계획을 공유할 경우의 이점은 SQL 파싱을 하드 파싱이 아닌 소프트 파싱으로 진행할 수 있다.
        소프트 파싱을 할 경우, 하드 파싱(SQL 최적화 과정)을 피할 수 있다.
           하드 파싱(SQL 최적화 과정)은 다음의 사항들이 존재한다. 
             - 후보 실행계획 생성 및 각각의 비용 계산, SQL 엔진이 실행할 수 있도록 코드 생성
        
 위와 같이 PreparedStatement 사용을 통해 DBMS에서 SQL 소프트 파싱을 진행할 수 있다. 

 

고맙습니다!

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입