Background Image
응용개발
2009.11.06 00:36

CUBRID의 Statement pooling기능

조회 수 16941 추천 수 0 댓글 0
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄

 JDBC 응용프로그램에서 Application 의 성능향상을 위해 Connection Pooling을 많이 사용한다. JDBC응용 프로그램과 DBMS 사이에 Connection 이 빈번하게 발생하면 실제로 질의를 처리하는 시간에 비해서 응용 프로그램과 DBMS 사이의 연결을 맺고 끊는데 많은 시간이 필요하기 때문이다. 대표적으로 Apache Project DBCP를 보면, 한번 맺은 Connection 을 재사용할 수 있도록 해준다. DBMS가 사용자가 입력한 SQL Statement을 처리하는 과정을 살펴보면, Connection Pooling 이 필요한 이유와 비슷한 이유로 Statement Pooling 이 필요하다는 것을 알 수 있다. CUBRID에서의 Statement pooling기능에 대해서 소개한다.

1.CUBRID Client
모듈에서 SQL Statement 의 처리
 - DBMS
SQL을 처리하여 결과를 만들어 내는 과정은 아래와 같은 단계를 거친다.

  SQL
입력 -> SQL Parsing -> Query Optimize -> 질의 수행 계획 작성 -> 질의 수행 -> 질의 결과

 - CUBRID
의 경우 Client 모듈과 Server 모듈로 분리되어 있고, Client 모듈이 질의 수행계획을 작성하는 것을 담당하고, Server 모듈은 작성된 수행계획을 수행하여 질의 결과를 생성하는 것을 담당한다.
 -
사용자가 SQL을 입력했을 때 Client 모듈이 하는 일을 아래와 같다.

  SQL Parsing :
입력된 SQL 문장에 대한 Syntax check semantic check 을 수행하고 수행 결과로서 Parse Tree 를 생성한다.

  Query Optimizer : Parse Tree
를 입력으로 받아 질의를 수행하는 비용이 작게 들도록 질의를 최적화 한다.

 
질의수행계획작성 : CUBRID Parse Tree를 입력으로 받아 CUBRID 서버가 질의를 수행하기 위한 실행 계획 Format XASL 을 생성 함.


 -
사용자가 임의의 SQL 문을 입력하면 위와 같은 과정이 되풀이 되고, 서버는 XASL 을 받아서 질의를 수행한 후 그 결과를 만들어 낸다.
 -
아래와 같은 질의를 연속적으로 수행한다고 가정해 보자.

  select * from history;

 -
위 질의가 수행되려면, 문장을 Parsing 하여 Parse Tree를 만들고, 질의 최적화를 수행하고, 질의 수행 계획을 만들어서 DB서버에 전달하여야 한다. 프로그래머가 다시 위의 질의를 수행하려면, 다시 Parsing, 최적화, 질의 수행을 다시 만들어야 한다. 같은 질의에 대해서 Parse Tree와 질의 수행 계획을 재 사용할 수 있다면, 클라이언트 모듈에서 발생하는 부하를 줄일 수 있다.

2.Statement Pooling
 - SQL Statement
Parsing 하고, 질의 수행계획을 만드는 것을 Statement Compile이라 하고, Compile Statement 를 재사용하기 위해 Statement Pooling하는 것을 Statement Pooling이라고 한다. 새로운 Statement 가 입력으로 주어졌을 때에는 해당 Statement를 새로 Compile 하여 사용하며, 사용이 끝난 Statement Pool에 반환한다. Pool에서 관리되는 Statement 들은 다시 Prepare하지 않고, Prepare 시 반환된 Statement Handle 값을 사용해 바로 Execute를 수행할 수 있음으로 Prepare 과정을 생략할 수 있다.
 - CUBRID
에서 Statement Pooling을 관리해 주는 Process cub_cas 이며 CAS(Common Application Server) 라고 불리고 있다.

3.CUBRID
에서 Statement Pooling 기능의 사용.
 - CUBRID
에서 Statement Pooling 기능을 사용하기 위해서는 cubrid_broker.conf의 옵션에 다음의 옵션을 추가해야 한다.

 STATEMENT_POOLING = ON

 -
해당 옵션을 변경한 후에는 반드시 CUBRID broker restart 해야 한다. Statement pooling 기능을 사용하기 위해서 별도로 JDBC를 사용하는 프로그래머가 해야 할 일은 없다.
 - Statement Pooling
기능과 관련하여 CUBRID가 가지는 특징이 있는데, CUBRID Statement Connection 에 종속적이며, 해당 Connection 에서 수행중인 Transaction commit 되거나 rollback 되면 그 Connection 에 있는 Statement 들이 close 되는 특징이 있다. CUBRID를 사용하여 JDBC 응용프로그램을 작성하는 프로그래머는 가끔씩 “Attempt to access a closed Statement” Exception 을 보게 되는데, commit 이후에 해당 Connection에 있던 Statement를 사용하려 했기 때문에 발생하는 경우가 대 부분이다. 이는 CUBRID Statement Transaction이 정리될 때 같이 정리된다는 사실을 잘 알지 못하고 프로그램을 작성하기 때문에 나타나는 현상이며, 이를 해결하기 위한 하나의 방법이 Statement Pooling 기능을 사용하는 것이다. Statement Pooling 기능을 활성화 시키면, JDBC CAS에서 commit이나 rollback 을 수행할 경우에 Statement close 하지 않기 때문이다.

4.CUBRID
Statement Pooling 은 언제 사용해야 하나?
 - CUBRID
Statement Pooling 옵션은 응용프로그램의 입장에서 Statement 를 재사용 할 가능성이 있으면 ON으로 하는 것이 좋다. (활성화 하지 않는다면 “Attempt to access a closed statement” Exception 을 만나게 될 것이다.) 특히, DBCP 와 같은 Connection Pooling을 구현해 주는 Library를 사용한다면 기본적으로 Statement 를 재 사용하려고 할 것임으로 옵션을 반드시 켜 주어야 한다.

참조: http://blog.naver.com/decay97/70051586945


  1. PHP에서 Prepared statement 사용시 NULL 값을 바인딩 하는 방법

    Date2009.11.27 Category응용개발 ByPrototype Views19719
    Read More
  2. CUBRID R3.0부터 JDBC를 사용하는 응용에서 charset 설정 방법이 변경되었네요.

    Date2010.12.02 Category응용개발 By손승일 Views19631
    Read More
  3. ODBC 드라이버를 이용한 Prepare 사용하기.

    Date2009.06.16 Category응용개발 Byseongjoon Views19587
    Read More
  4. CUBRID2008 Java Stored Procedure 등록 방법

    Date2010.02.24 Category응용개발 Bycubebridge Views19559
    Read More
  5. PHP PEAR extension 을 이용한 DB Time 추적

    Date2009.07.01 Category응용개발 By웁쓰 Views19182
    Read More
  6. JDBC 커넥션 스트링에 UTF-8 명시하는법

    Date2009.07.03 Category응용개발 ByPrototype Views19016
    Read More
  7. embedded sql 에서 char 사용시 주의 사항

    Date2008.11.21 Category응용개발 Byadmin Views19007
    Read More
  8. CUBRID에서 제약조건(PK,FK,UNIQUE),index 설정 시 주의 사항

    Date2009.11.26 Category응용개발 Bycubebridge Views18884
    Read More
  9. MySQL의 Blob타입을 CUBRID로 변환하기

    Date2009.11.18 Category응용개발 Bycubebridge Views18849
    Read More
  10. 그루비로 큐브리드 함수(or 프로시저) 만들기 by 행복개발자(cyberuls)

    Date2009.07.14 Category응용개발 By시난 Views18753
    Read More
  11. cubrid_fetch_all() php 함수로 만들어 사용하기

    Date2009.06.30 Category응용개발 By시난 Views18619
    Read More
  12. 패키지 형태로 생성된 JAVA class를 JAVA SP에서 사용하기

    Date2010.02.26 Category응용개발 By손승일 Views18372
    Read More
  13. Java Data Type의 CUBRID Data Type으로의 변경 Tip

    Date2009.06.16 Category응용개발 Bycubebridge Views18026
    Read More
  14. JAVA SP를 통해 다른 데이터베이스 연결하는 경우 잊지 말자.

    Date2009.12.16 Category응용개발 By손승일 Views17975
    Read More
  15. PHP 성능 최적화를 위한 고려 사항

    Date2009.07.01 Category응용개발 By웁쓰 Views17410
    Read More
  16. CUBRID-PHP-Driver 연동가이드

    Date2012.11.13 Category응용개발 Bycubebridge Views17135
    Read More
  17. PHP PEAR extension Cache-Lite 를 이용한 응용 프로그램 최적화

    Date2009.07.01 Category응용개발 By웁쓰 Views17038
    Read More
  18. CUBRID의 Statement pooling기능

    Date2009.11.06 Category응용개발 Bycubebridge Views16941
    Read More
  19. 오라클 to CUBRID로 마이그레이션 수행 시 주의사항

    Date2012.11.12 Category응용개발 Bycubebridge Views16636
    Read More
  20. PHP에 CUBRID 모듈 추가시 모듈이 로드되지 않는 문제에 대한 해결 방안 하나입니다

    Date2010.07.01 Category응용개발 By남재우 Views16556
    Read More
Board Pagination Prev 1 2 3 Next
/ 3

Contact Cubrid

대표전화 070-4077-2110 / 기술문의 070-4077-2113 / 영업문의 070-4077-2112 / Email. contact_at_cubrid.com
Contact Sales