* 질문 등록 시 다음의 내용을 꼭 기입하여 주세요.
CentOS 64bit | |
9.2.0005 | |
[도움말]-[버전정보] 확인 | |
java |
* CUBRID 응용 오류, SQL 오류 또는 SQL 튜닝 관련된 문의는 반드시 다음의 내용을 추가해 주세요. 비밀글이나 비밀 댓글도 가능합니다.
* 저희가 상황을 이해하고, 재현이 가능해야 알 수 있는 문제들이 많습니다. 가능한 정보/정황들을 부탁합니다.
에러 내용 및 재현 방법 | 재현 가능한 Source와 SQL |
관련 테이블(인덱스, 키정보 포함) 정보 | CUBRID 홈 디렉토리 아래 log 디렉토리 압축 |
-------------- 아래에 질문 사항을 기입해 주세요. ------------------------------------------------------------------------
큐브리드의 isolation_level은 타 DBMS와 달리 read uncommited로 되어 있다는 것을 도큐멘트와 실제 테스트를 통해서 확인했습니다.
하지만, 타 DBMS처럼 read commited로 변경 하고자 합니다.
도큐멘트에서 확인해 보니 cubrid.conf 파일에서 isolation_level을 4로 바꾸면 된다고 나와 있더군요.
그렇게 수정하고 재시작 후 다음 과 같은 순서로 테스트를 진행 했습니다.
1. 서버사이드(자바)에서 디버깅 모드로 insert 구문 실행 후 브레이킹 상태
2. 큐브리드 쿼리브라우저에서 insert 대상 테이블 조회
3. 에러 출력 Your transaction (index 8,-------------------------------------) timed out waiting on S_LOCK lock on class -----------.
위의 에러 대신, 타 DBMS처럼 lock이 걸리지 않고, 컴밋되지 않은 데이터가 정상적으로 조회 되도록 하려면 어떻게 설정해야 할까요?
안녕하세요. 답변이 늦어 죄송합니다.
Read Committed 자체는 트랜잭션 A에서 INSERT/UPDATE 수행 시, 트랜잭션 B는 해당 데이터를 읽을 수 없도록 하는 것입니다. 그렇기 때문에 데이터를 INSERT 하는 도중에 해당 데이터를 조회하려고 할 때 오류가 발생하는 것입니다.
Commit 되지 않은 데이터를 조회할 수 있도록 하기 위해서는 REPEATABLE READ CLASS with READ UNCOMMITTED INSTANCE(3),
READ COMMITTED CLASS with READ COMMITTED INSTANCES(2)또는 READ COMMITTED CLASS with READ UNCOMMITTED INSTANCE(1)로 설정해 주시면 됩니다.매뉴얼 데이터베이스 동시성 부분을 참고하여 확인하시면 될 것 같습니다.
감사합니다.
-----------
04/16일자로 수정하엿습니다. 수정된 부분은 아래와 같습니다.
READ COMMITTED CLASS with READ COMMITTED INSTANCES(2)는 Committed Instance만 확인 가능하므로 위에서 말씀하신 가능한 설정과는 다르므로 제거하였습니다.