database.sarang.net
UserID
Passwd
Database
DBMS
MySQL
PostgreSQL
Firebird
Oracle
Informix
Sybase
MS-SQL
DB2
Cache
ㆍCUBRID
LDAP
ALTIBASE
Tibero
DB 문서들
스터디
Community
공지사항
자유게시판
구인|구직
DSN 갤러리
도움주신분들
Admin
운영게시판
최근게시물
CUBRID Q&A 870 게시물 읽기
No. 870
Q.Commit 과 Lock 관련 문의 입니다.
작성자
김지완
작성일
2008-01-23 12:03
조회수
5,411

안녕하세요.. ^^

 

이번에 궁금한 점은 Commit 과 lock 에 관한 질문입니다.

 

저희 프로그램 여러 개가 동시에 DB에 접속해서 select, update, insert 등의 작업을

실행하는데요.. 갑자기 어느 시점에 속도저하가 발생해서 lockdb 프로그램을 이용해서

확인을 해보았습니다.

확인 결과 lock 이 많이 발생해서 전체적으로 속도가 느려지는 문제가 발생하더군요.

 

현재 lock timeout 설정하고 프로그램에서 한 건 처리시 마다 commit 을 수행하도록

했습니다만 좋은 방법은 아닌 것 같습니다..

 

그리고 게시판을 찾아보았는데, SELECT 질의 후에도 commit 을 실행 해야 한다는

내용을 보았습니다. 게시물이 2006년도 게시물 이었는데요. 현재 버전도 SELECT 이후에

COMMIT 을 실행해야 하는지 궁금합니다.

 

AUTOCOMMIT 모드도 테스트 해보려 했는데 Python 에서 AUTOCOMMIT 모드를 사용하는

방법이 없는 것 같습니다. Python API 가 CCI 를 사용하는 것 같아 고쳐 사용하려고 합니다.

그런데 CCI 에서는 AUTOCOMMIT 을 지원하고 있지 않다고 하는 글을 읽었는데요.

 

답변 좀 부탁 드리겠습니다.

 

감사합니다. ^^

이 글에 대한 댓글이 총 1건 있습니다.

안녕하세요.

답변이 늦어서 죄송합니다.

일단 CCI 에서는 auto commit 이 지원되지 않습니다. 따라서 auto commit 을 구현하셔야 하며 결국 각 transaction 마다 commit 을 수행시켜주셔야 합니다.

또한 select 후 commit 을 하여야 하는 이유는 저희 구조가 3-tier 구조를 채택하고 있어 미들웨어단에서 트랜잭션에 대한 관리가 되다 보니(물론 코딩하실때는 신경쓸 필요는 없습니다) select 만 하더라도 트랜잭션이 시작된 것으로 처리하고 트랜잭션 동안에는 미들웨어단의 하나의 cas(미들웨어 응용서버)가 선점되어 다른 서비스를 처리하는데 제한을 받을 수 있기 때문에 그렇습니다. 일반적으로 cas 는 사용자의 수만큼 구동이 되지 않기 때문에 여러 사용자가 적은 갯수의 cas 를 사용해야 하기때문입니다.

저희 제품의 기본 설정에서는 select 는 lock 과 관련이 없기 때문에 select 작업이 lock 으로 인하여 영향을 받기는 어렵습니다.

lockdb 를 보셨을때 WAITER 가 보이신다면 lock 으로 인한 성능저하가 확연히 확인이 될수가 있을 것이고, 그럴경우 응용프로그램상에서 lock 을 오랬동안 유지하는 부분이 있는지 찾아 보실 필요가 있읍니다. 예를 들어 게시물 수정시 DB 에 내용을 update 하고 첨부화일을 저장하고 commit 을 수행한다면 첨부화일 저장하는 시간만큼 lock 이 유지가 되어 다른 사용자가 게시물을 볼때 조회건수를 update 하려하는 경우 lock 때문에 기다릴 수가 있읍니다. 이런 부분을 찾아서 수정하실 필요가 있읍니다. 예시의 경우에는 화일 처리를 먼저하고 DB 작업을 하시면 될 것입니다.

마지막으로 게시물이 언제 것인지는 상관이 없습니다. JDBC, PHP, ODBC 등을 통하여 작업을 하신다면, CCI 도 마찬가지 이구요, select 후에도 commit 처리를 해주셔야 합니다.

 

>안녕하세요.. ^^

>

>이번에 궁금한 점은 Commit 과 lock 에 관한 질문입니다.

>

>저희 프로그램 여러 개가 동시에 DB에 접속해서 select, update, insert 등의 작업을

>실행하는데요.. 갑자기 어느 시점에 속도저하가 발생해서 lockdb 프로그램을 이용해서

>확인을 해보았습니다.

>확인 결과 lock 이 많이 발생해서 전체적으로 속도가 느려지는 문제가 발생하더군요.

>

>현재 lock timeout 설정하고 프로그램에서 한 건 처리시 마다 commit 을 수행하도록

>했습니다만 좋은 방법은 아닌 것 같습니다..

>

>그리고 게시판을 찾아보았는데, SELECT 질의 후에도 commit 을 실행 해야 한다는

>내용을 보았습니다. 게시물이 2006년도 게시물 이었는데요. 현재 버전도 SELECT 이후에

>COMMIT 을 실행해야 하는지 궁금합니다.

>

>AUTOCOMMIT 모드도 테스트 해보려 했는데 Python 에서 AUTOCOMMIT 모드를 사용하는

>방법이 없는 것 같습니다. Python API 가 CCI 를 사용하는 것 같아 고쳐 사용하려고 합니다.

>그런데 CCI 에서는 AUTOCOMMIT 을 지원하고 있지 않다고 하는 글을 읽었는데요.

>

>답변 좀 부탁 드리겠습니다.

>

>감사합니다. ^^

 

남재우님이 2008-01-24 00:33에 작성한 댓글입니다. Edit
[Top]
No.
제목
작성자
작성일
조회
873Q.php 에서 PDO 방식 지원 여부 [1]
강석운
2008-01-25
5017
872Q.윈도우 설치 후.. 에러 [1]
Jay Jung
2008-01-25
4736
871Q.visual studio 2005 C#과의 연결
박상일
2008-01-23
5128
870Q.Commit 과 Lock 관련 문의 입니다. [1]
김지완
2008-01-23
5411
869Q.[요청] database간 테이블 복사/이동 [1]
gilbird
2008-01-22
4883
868Q.INSERT INTO SELECT 문제... [1]
inos
2008-01-22
5472
867Q.설치에러관련 [2]
브리드
2008-01-21
4916
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2023 DSN, All rights reserved.
작업시간: 0.049초, 이곳 서비스는
	PostgreSQL v16.1로 자료를 관리합니다