cubrid 에 select , insert, update, delete 을 시행했을때
select에도 반드시 commit 과 rollback을 해주어야 하나요?
제가 상대로 하고 있는게 cubrid 이전 버전인 unisql 입니다..
아시는 분.. 답변 부탁드려요.
*CUBRID Q&A의 내용을 그대로 옮김니다.
기본적으로는 lock level 에 따라서 commit/rollback 을 통한 transaction 정리가 필요해집니다. 일반적으로 DB에 write 행위가 일어났을때는 반드시 transaction 정리를 해주어야 하며, read 행위시에도 lock 이 발생하는 lock level 을(REPEATABLE READ 이상) 일 경우에도 transaction 을 정리해 주어야 합니다. 지금 질문하신 경우는 JDBC/ODBC/PHP 등을 사용하는 경우를 말씀하시는 것으로 보이며, 저희 제품은 구조상 3-tier 형태를 취하고 있읍니다. 즉 driver 가 바로 DB server 로 접근하는 것이 아니라 중간에 CAS 를 두어 CAS에서 connection 관리등을 통한 서비스를 하고 있읍니다. 문제는 CAS 의 숫자를 무한정으로 할 수가 없으므로 어느정도 제한된 숫자로 서비스를 하다 보니 어느 한 driver 가 오래동안 한 CAS 를 점유(한 transaction 동안)하게 되면 다른 driver 들이 서비스를 받을 기회가 적어진다는 것입니다. 현재 select 만을 수행하더라도 transaction 의 시작으로 간주하기때문에 한개의 CAS 가 한개의 driver 에 점유되어 버립니다. 따라서 일반적은 상황에서는 auto commit 을 on 으로 하시고, insert/update/delete 의 상황에서만 auto commit 을 off 로 하신후 commit/rollback 처리를 하시면 됩니다. 만약 auto commit 이 제공되지 않는다면 불편하시더라도 select 사용후 바로 commit 을 하도록 하셔야 합니다.