SlideShare ist ein Scribd-Unternehmen logo
1 von 31
Date: 2015-07-01
(주)큐브리드 기술본부
CUBRID 트랜잭션 처리 원리
© 2011 CUBRID Co., Ltd. All rights reserved.
목차
1. 트랜잭션이란?
2. 트랜잭션 처리
3. 트랜잭션 격리 수준
4. 잠금 관리
5. 유령읽기란?
6. 스키마 잠금
7. 잠금 상태 확인
8. 느린 질의 탐지
9. 교착상태
© 2015 CUBRID Co., Ltd. All rights reserved. 3
1. 트랜잭션이란?
업무적으로 의미가 있는 최소 작업 단위
ex) 계좌이체
UPDATE ACCNT
SET AMOUNT = AMOUNT - 500
WHERE ACCNT_NO = 1
;
UPDATE ACCNT
SET AMOUNT = AMOUNT + 500
WHERE ACCNT_NO = 2
;
하나의 트랜잭션으로 수행(일관성)
- 동시성이란 여러 개의 트랜잭션이 동시에 수행될 수 있게 하는 성질!
일관성 동시성
Trade-off관계
일관성이 높아지면, 동시성은 떨어진다.
동시성이 높아지면, 일관성은 떨어진다.
© 2015 CUBRID Co., Ltd. All rights reserved. 4
2. 트랜잭션 처리
- 커밋과 롤백
커밋 : 하나의 작업에서 진행되는 여러 연산을 모두 반영
롤백 : 하나의 작업에서 진행되는 여러 연산을 모두 취소
- 트랜잭션 관리
잠금 보유자 : Lock을 획득한 보유자
잠금 대기자 : Lock을 획득하려고 대기 중 인자
- 교착 상태 : 여러 개의 트랜잭션이 동시에 수행, 서로 상대방이 사용중인 데이
터를 갱신하려고 대기중인 상태
-> 교착상태 발생시 CUBRID는 트랜잭션 중 가장 최근에 수행된 트랜잭션을
롤백 시켜 자동으로 해결한다.
- 잠금 대기 제한시간 : 잠금 대기가 무한정 지속되는 상황을 해결
© 2015 CUBRID Co., Ltd. All rights reserved. 5
3. 트랜잭션 격리 수준
- 트랜잭션 격리 수준이란 트랜잭션이 동시에 진행 중일때 "읽기 일관성"을 어느
선까지 보장할 것인지 명시하는 기준
격리수준 일관성 동시성
격리수준 일관성 동시성
- 읽기 일관성에 관련해 발생되는 상황
Dirty Read : Tx1이 아직 커밋 하지 않은 데이터를 Tx2가 그대로 읽음
Non-Repeatale Read : Tx1이 같은 데이터를 반복적으로 Select하는 사이 Tx2가
해당 데이터를 update 혹은 delete시킴
Phantom Read : Tx1이 특정 범위의 데이터를 반복해 읽는 사이 해당 조건을 만족
하는 새로운 데이터를 Tx2가 Insert시킴
© 2015 CUBRID Co., Ltd. All rights reserved. 6
3. 트랜잭션 격리 수준
순번 격리 수준 설명 비고
1 Read Uncommited(3) 더티읽기,반복불가능한읽기,유령읽기 허용 Cubrid의 기본 설정임
2 Read Commited(4) 반복불가능한읽기,유령읽기 허용 Oracle의 기본 설정임
3 Repeatable Read(5) 유령읽기 허용
4 Serializable(6) 전부 차단 일관성이 가장 높음
- CUBRID가 제공하는 격리성 수준
- Cubrid의 격리 수준 설정
cubrid.conf파일의 "isolation_level=숫자" 설정
특정 응용프로그램만 설정시에는 "set transaction isolation level 숫자" 명령으로
설정
© 2015 CUBRID Co., Ltd. All rights reserved. 7
4. 잠금관리
순번 락 이름 잠금 보유자(Tx1) 잠금 대기자(Tx2)
1
공유 잠금
(S_LOCK)
읽기 중 읽기 가능, 쓰기 불가
2
베타 잠금
(X_LOCK)
갱신 중 읽기 가능, 쓰기 불가
3
갱신 잠금
(U_LOCK)
갱신, 삭제 대상 조회 중 읽기 가능, 쓰기 불가
4
의도 공유 잠금
(IS_LOCK)
S_LOCK 획득 시 Table에 IS_LOCK 획득
스키마 변경 불가, 모든 행 갱신 불가, 일부 행 갱신
가능, 모든 행 조회 가능
5
의도 베타 잠금
(IX_LOCK)
X_LOCK 획득 시 Table에 IX_LOCK 획득
스키마 변경 불가, 모든 행 갱신 불가, 일부 행 갱신
가능, 모든 행 조회 불가
6
공유 의도 베타 잠
금(SIX_LOCK)
IS_LOCK+IX_LOCK 획득 시 SIX_LOCK 획득
스키마 변경 불가, 모든 행 갱신 불가, 일부 행 갱신
불가, 모든 행 조회 불가, 일부 행 조회 가능
7
다음 키 공유 잠금
(NS_LOCK)
삽입 중 자신의 키와 다음 키에 NS_LOCK 획득, 삽입 직
후 다음 키에 NS_LOCK은 해제, 현재 키는 NS_LOCK유
지
읽기 가능, NS_LOCK이 걸려있으면 쓰기 불가
8
다음 키 베타 잠금
(NX_LOCK)
갱신, 삭제 대상 조회 중 대상 건 까지는 X_LOCK, 다음 키
까지는 NX_LOCK 획득
읽기 가능, 쓰기 불가
- Cubrid Lock의 종류(Cubrid 격리 수준 3)
© 2015 CUBRID Co., Ltd. All rights reserved. 8
4. 잠금관리
순번 락 이름 잠금 보유자(Tx1) 잠금 대기자(Tx2)
1
공유 잠금
(S_LOCK)
읽기 중 읽기 가능, 쓰기 불가
2
베타 잠금
(X_LOCK)
갱신 중 읽기 불가, 쓰기 불가
3
갱신 잠금
(U_LOCK)
갱신, 삭제 대상 조회 중 읽기 불가, 쓰기 불가
4
의도 공유 잠금
(IS_LOCK)
S_LOCK 획득 시 Table에 IS_LOCK 획득
스키마 변경 불가, 모든 행 갱신 불가, 일부 행 갱신
가능, 모든 행 조회 가능
5
의도 베타 잠금
(IX_LOCK)
X_LOCK 획득 시 Table에 IX_LOCK 획득
스키마 변경 불가, 모든 행 갱신 불가, 일부 행 갱신
가능, 모든 행 조회 불가
6
공유 의도 베타 잠
금(SIX_LOCK)
IS_LOCK+IX_LOCK 획득 시 SIX_LOCK 획득
스키마 변경 불가, 모든 행 갱신 불가, 일부 행 갱신
불가, 모든 행 조회 불가, 일부 행 조회 가능
7
다음 키 공유 잠금
(NS_LOCK)
삽입 중 자신의 키와 다음 키에 NS_LOCK 획득, 삽입 직
후 다음 키에 NS_LOCK은 해제, 현재 키는 NS_LOCK유
지
NS_LOCK이 걸려있으면 읽기 불가, NS_LOCK이
걸려있으면 쓰기 불가
8
다음 키 베타 잠금
(NX_LOCK)
갱신, 삭제 대상 조회 중 대상 건 까지는 X_LOCK, 다음 키
까지는 NX_LOCK 획득
읽기 불가, 쓰기 불가
- Cubrid Lock의 종류(Cubrid 격리 수준 4)
© 2015 CUBRID Co., Ltd. All rights reserved. 9
5. 유령읽기란?
- 유령읽기(Cubrid 격리수준 3)
create table tbl1(id int primary key);
insert into tbl1 VALUES (1), (2), (3), (20);
시
간
TX1 TX2
INSERT INTO TBL1 VALUES(8);
SELECT * FROM TBL1;
유령 읽기 발생!
COMMIT;
SELECT * FROM TBL1;
© 2015 CUBRID Co., Ltd. All rights reserved. 10
5. 유령읽기란?
- 유령읽기(Cubrid 격리수준 6)
create table tbl1(id int primary key);
insert into tbl1 VALUES (1), (2), (3), (20);
시
간
TX1 TX2
INSERT INTO TBL1 VALUES(8);
SELECT * FROM TBL1;
COMMIT;
SELECT * FROM TBL1;
대기중!
대기풀림
대기중!
COMMIT;대기풀림
© 2015 CUBRID Co., Ltd. All rights reserved. 11
5. 유령읽기란?
- 유령읽기(Cubrid 격리수준 6)
create table tbl1(id int primary key);
insert into tbl1 VALUES (1), (2), (3), (20);
시
간
TX1 TX2
INSERT INTO TBL1 VALUES(8);
SELECT * FROM TBL1 WHERE
ID < 10; 대기상태(유령읽기 방지)
COMMIT;대기 풀림
SELECT * FROM TBL1 WHERE
ID < 10;
© 2015 CUBRID Co., Ltd. All rights reserved. 12
6. 스키마 잠금
- 스키마 안정 잠금 (SCH_S) : 질의 컴파일 수행 시 획득, 다른 트랜잭션이 해당 스키마 수정을 방지
- 스키마 수정 잠금 (SCH-M) : DDL 작업 수행 시 획득, 다른 트랜잭션이 수정된 스키마에 접근하는
것을 금지
© 2015 CUBRID Co., Ltd. All rights reserved. 13
7. 잠금 상태 확인
- "cubrid lockdb databasename" 명령어
잠금 관련 시스템 파라미터 설정 값 확인
Lock Escalation at : 락 에스컬레이션이 발생하는 조건, 행 잠금 개수와 키
잠금 개수의 합이 100,000개 초과시 행 수준 잠금이 테이블 수준 잠금으로 대
체됨(테이블 잠금으로 대체되면 동시성이 떨어짐)
Run Deadlock interval : 교착상태 트랜잭션이 있는지 탐지하는 주기, 1초마
다 교착상태가 있는지 확인 후 둘 중 하나를 자동으로 Rollback 시킴
© 2015 CUBRID Co., Ltd. All rights reserved. 14
7. 잠금 상태 확인
- "cubrid lockdb databasename" 명령어
현재 데이터베이스 서버에 접속중인 클라이언트 확인
Transaction : 트랜잭션 정보(ID, 프로그램, 계정@호스트|프로세스번호)
Isolation :해당 트랜잭션의 격리수준
State : 트랜잭션의 상태
Timeout_period : 잠금 대기 시간 제한 설정
© 2015 CUBRID Co., Ltd. All rights reserved. 15
7. 잠금 상태 확인
- "cubrid lockdb databasename" 명령어
객체 잠금 상태 확인
Current number of objects which are locked : 잠금 객체의 개수
OID : 볼륨번호|페이지번호|슬롯번호
Object type : 객체의 종류, test1은 테이블임
Index name : 인덱스 명
Total mode of holders : tbl1에 NX_LOCK이 잡혀있음
Total mode of waiters : tb1에 NX_LOCK을 얻고 싶은 상태
Num holders : 잠금 개수
Num blocked-holders : 차단된 잠금 개수(상위객체에 의해 차단된 잠금 개수, 예를 들어 X_LOCK보유해서 진짜로
갱신하려니 테이블 락이 걸려있는 상태)
Num waiters : 대기자 개수
Lock holder : 잠금 보유자 정보
Lock waiter : 잠금 대기자 정보
© 2015 CUBRID Co., Ltd. All rights reserved. 16
여기서 잠깐!
Cubrid Oracle
update test1 set val=200
where id = 20 and val =20;
drop table tbl1;
rollback;
select val from test1
where id = 20;
결과 = 20
update test1 set val=200
where id = 20 and val =20;
drop table tbl1;
rollback;
select val from test1
where id = 20;
결과 = 200
DDL을 쳐도 Commit 하지 않음 DDL을 치는 순간 커밋!
© 2015 CUBRID Co., Ltd. All rights reserved. 17
7. 잠금 상태 확인(INSERT VS EQUAL SELECT)
- "cubrid lockdb databasename" 명령어
잠금 상태 확인 실습(cubrid 격리수준 3)
create table tbl (id int primary key, a int);
insert into tbl values(10, 10);
insert into tbl values(20, 20);
insert into tbl values(40, 40);
시
간
TX1 TX2
insert into tbl values(30, 30);
select * from tbl where id = 30;
id = 30,40에 대해 NS_LOCK 획득
id = 30에 대해 X_LOCK 획득
© 2015 CUBRID Co., Ltd. All rights reserved. 18
7. 잠금 상태 확인(INSERT VS EQUAL SELECT)
- "cubrid lockdb databasename" 명령어
잠금 상태 확인 실습(cubrid 격리수준 4)
create table tbl (id int primary key, a int);
insert into tbl values(10, 10);
insert into tbl values(20, 20);
insert into tbl values(40, 40);
시
간
TX1 TX2
insert into tbl values(30, 30);
select * from tbl where id = 30;
id = 30,40에 대해 NS_LOCK 획득
id = 30에 대해 X_LOCK 획득
id = 30에 대해 S_LOCK을 얻고
싶지만 Tx1이 X_LOCK을 획득해서
대기중
© 2015 CUBRID Co., Ltd. All rights reserved. 19
7. 잠금 상태 확인(INSERT VS UPDATE)
- "cubrid lockdb databasename" 명령어
잠금 상태 확인 실습 (cubrid 격리수준 3)
create table tbl (id int primary key, a int);
insert into tbl values(10, 10);
insert into tbl values(20, 20);
insert into tbl values(40, 40);
시
간
TX1 TX2
insert into tbl values(30, 30);
update tbl set a=1000 where id = 30;
id = 30,40에 대해 NS_LOCK 획득
id = 30에 대해 X_LOCK 획득
id = 30에 대해 U_LOCK을 얻고
싶지만 Tx1이 X_LOCK을 획득해서
대기중
© 2015 CUBRID Co., Ltd. All rights reserved. 20
7. 잠금 상태 확인(INSERT VS UPDATE)
- "cubrid lockdb databasename" 명령어
잠금 상태 확인 실습 (cubrid 격리수준 4)
create table tbl (id int primary key, a int);
insert into tbl values(10, 10);
insert into tbl values(20, 20);
insert into tbl values(40, 40);
시
간
TX1 TX2
insert into tbl values(30, 30);
update tbl set a=1000 where id = 30;
id = 30,40에 대해 NS_LOCK 획득
id = 30에 대해 X_LOCK 획득
id = 30에 대해 U_LOCK을 얻고
싶지만 Tx1이 X_LOCK을 획득해서
대기중
© 2015 CUBRID Co., Ltd. All rights reserved. 21
7. 잠금 상태 확인(INSERT VS RANGE SELECT)
- "cubrid lockdb databasename" 명령어
잠금 상태 확인 실습 (cubrid 격리수준 3)
create table tbl (id int primary key, a int);
insert into tbl values(10, 10);
insert into tbl values(20, 20);
insert into tbl values(40, 40);
시
간
TX1 TX2
insert into tbl values(30, 30);
select * from tbl where id between 20 and 30;
id = 30,40에 대해 NS_LOCK 획득
id = 30에 대해 X_LOCK 획득
© 2015 CUBRID Co., Ltd. All rights reserved. 22
7. 잠금 상태 확인 (INSERT VS RANGE SELECT)
- "cubrid lockdb databasename" 명령어
잠금 상태 확인 실습 (cubrid 격리수준 4)
create table tbl (id int primary key, a int);
insert into tbl values(10, 10);
insert into tbl values(20, 20);
insert into tbl values(40, 40);
시
간
TX1 TX2
insert into tbl values(30, 30);
select * from tbl where id between 20 and 30;
id = 30,40에 대해 NS_LOCK 획득
id = 30에 대해 X_LOCK 획득
id = 30에 대해 S_LOCK을 얻고
싶지만 Tx1이 X_LOCK을 획득해서
대기중
© 2015 CUBRID Co., Ltd. All rights reserved. 23
7. 잠금 상태 확인(INSERT VS RANGE UPDATE)
- cubrid lockdb databasename 명령어
잠금 상태 확인 실습 (cubrid 격리수준 3)
create table tbl (id int primary key, a int);
insert into tbl values(10, 10);
insert into tbl values(20, 20);
insert into tbl values(40, 40);
시
간
TX1 TX2
insert into tbl values(30, 30);
update tbl set a = 1000 where id between
20 and 25;
id = 30,40에 대해 NS_LOCK 획득
id = 30에 대해 X_LOCK 획득
id = 30에 대해 NX_LOCK을 얻고
싶지만 Tx1이 NS_LOCK을 획득해서
대기중
© 2015 CUBRID Co., Ltd. All rights reserved. 24
7. 잠금 상태 확인(INSERT VS RANGE UPDATE)
- cubrid lockdb databasename 명령어
잠금 상태 확인 실습 (cubrid 격리수준 4)
create table tbl (id int primary key, a int);
insert into tbl values(10, 10);
insert into tbl values(20, 20);
insert into tbl values(40, 40);
시
간
TX1 TX2
insert into tbl values(30, 30);
update tbl set a = 1000 where id between
20 and 25;
id = 30,40에 대해 NS_LOCK 획득
id = 30에 대해 X_LOCK 획득
id = 30에 대해 NX_LOCK을 얻고
싶지만 Tx1이 NS_LOCK을 획득해서
대기중
© 2015 CUBRID Co., Ltd. All rights reserved. 25
8. 느린 질의 탐지
- cubrid tranlist 명령어
Tran index : 트랜잭션ID(트랜잭션상태)
User name : DB사용자 이름
Host name : 장비명
Process id : 트랜잭션을 실행중인 프로세스id
Program name : 트랜잭션을 실행중인 프로세스명
Query time : 수행중인 SQL의 총 수행 시간
Tran time : 현재 트랜잭션의 총 수행시간
wait for lock holder : 해당 잠금을 보유중인 트랜잭션ID
SQL_ID : SQL Text에 대한 아이디
SQL Text : 수행중인 질의문
© 2015 CUBRID Co., Ltd. All rights reserved. 26
8. 느린 질의 탐지
- cubrid killtran 명령어
해당 트랜잭션을 kill시키면 아래와 같이 interrupted되면서 중지됨
© 2015 CUBRID Co., Ltd. All rights reserved. 27
9. 교착상태
- 교착상태는 둘 이상의 트랜잭션이 서로 자신의 리소스를 놓지 않으면서 상대방의 리소스를 원 할때
발생한다.
- 교착상태 발생 가능성이 높은 상황
질의 수행이 느린 경우
잠금 대기 시간이 길어지는 경우
어플리케이션의 로직 문제
한 테이블에 인덱스가 많아 키 잠금이 많아지는 경우
- 교착상태 발생 가능성을 낮추기 위한 조치
트랜잭션을 가급적 짧게 정의할 것
테이블 액세스 순서를 동일하게 할 것
DML질의인 경우 full table scan에 유의 할 것
© 2015 CUBRID Co., Ltd. All rights reserved. 28
9. 교착상태
- 교착상태 발생 케이스 (cubrid 격리수준 3,4)
create table tbl3 (id int);
create index ix_tbl3_id on tbl3(id);
insert into tbl3 values (10), (20), (30), (40);
commit;
시
간
TX2
update tbl3 set id = 35
where id = 10;
update tbl3 set id=15
where id = 30;
TX1
[2번] id = 40에 대해 NX_LOCK 획득
[1번] id = 20에 대해 NX_LOCK 획득
[4번] id = 20에 대해 NX_LOCK 획득
[3번] id = 40에 대해 NX_LOCK 획득
[1번] -> [3번] -> [2번] -> [4번] 순서로 작업이 진행되면 교착상태 발생!
© 2015 CUBRID Co., Ltd. All rights reserved. 29
9. 교착상태
교착 상태 확인 실습(2개의 트랜잭션) (cubrid 격리수준 3,4)
create table tbl (id int primary key, a int);
insert into tbl values(10, 10);
insert into tbl values(20, 20);
insert into tbl values(40, 40);
시
간
TX1 TX2
insert into tbl values(30, 30);
update tbl set a = 1000 where id between
20 and 25;
id = 30,40에 대해 NS_LOCK 획득
id = 30에 대해 X_LOCK 획득
id = 30에 대해 NX_LOCK을 얻고
싶지만 Tx1이 NS_LOCK을 획득해서
대기중
update tbl set a = 2000 where id = 20; id = 20에 대해 U_LOCK을 얻고 싶지만 Tx2가 X_LOCK을 획득해서 대기
교착상태 자동감지로 인해 트랜잭
션이 자동 종료됨
© 2015 CUBRID Co., Ltd. All rights reserved. 30
9. 교착상태
교착 상태 확인 실습(3개의 트랜잭션) (cubrid 격리수준 3,4)
create table tbl (id int primary key, a int);
insert into tbl values(10, 10), (20, 20), (30,30);
시
간
TX1 TX2
insert into tbl values(40, 40);
update tbl set a=2000 where id = 30;
id = 40에 대해 NS_LOCK 획득
id = 40에 대해 X_LOCK 획득
id = 40에 대해 NX_LOCK을 얻고
싶지만 Tx1이 NS_LOCK을 획득해서
대기중
TX3
update tbl set a=2500
where id between 20 and 30;
id = 30 에 대해 tx2가 U_LOCK을
잡고 있어서 U_LOCK획득 대기중
update tbl set a=1000 where id=10;
id = 20에 대해 NX_LOCK을 얻고 싶지만
Tx3가 NX_LOCK을 획득해서 대기
교착상태 자동감지로 인해 트랜잭
션이 자동 종료됨
CUBRID(큐브리드) 트랜잭션 처리 원리

Weitere ähnliche Inhalte

Was ist angesagt?

What is AUTOSAR MCAL? Learn about the software module architecture and device...
What is AUTOSAR MCAL? Learn about the software module architecture and device...What is AUTOSAR MCAL? Learn about the software module architecture and device...
What is AUTOSAR MCAL? Learn about the software module architecture and device...Embitel Technologies (I) PVT LTD
 
S13 Oracle Database を Microsoft Azure 上で運用する為に~基本事項とベストプラクティス
S13 Oracle Database を Microsoft Azure 上で運用する為に~基本事項とベストプラクティスS13 Oracle Database を Microsoft Azure 上で運用する為に~基本事項とベストプラクティス
S13 Oracle Database を Microsoft Azure 上で運用する為に~基本事項とベストプラクティスMicrosoft Azure Japan
 
Apache Airflow 概要(Airflowの基礎を学ぶハンズオンワークショップ 発表資料)
Apache Airflow 概要(Airflowの基礎を学ぶハンズオンワークショップ 発表資料)Apache Airflow 概要(Airflowの基礎を学ぶハンズオンワークショップ 発表資料)
Apache Airflow 概要(Airflowの基礎を学ぶハンズオンワークショップ 発表資料)NTT DATA Technology & Innovation
 
Qlik Replicateでのレプリケーション・タスクの監視と制御
Qlik Replicateでのレプリケーション・タスクの監視と制御Qlik Replicateでのレプリケーション・タスクの監視と制御
Qlik Replicateでのレプリケーション・タスクの監視と制御QlikPresalesJapan
 
[B31] LOGMinerってレプリケーションソフトで使われているけどどうなってる? by Toshiya Morita
[B31] LOGMinerってレプリケーションソフトで使われているけどどうなってる? by Toshiya Morita[B31] LOGMinerってレプリケーションソフトで使われているけどどうなってる? by Toshiya Morita
[B31] LOGMinerってレプリケーションソフトで使われているけどどうなってる? by Toshiya MoritaInsight Technology, Inc.
 
micro-ROS - New client library and middleware features
micro-ROS - New client library and middleware featuresmicro-ROS - New client library and middleware features
micro-ROS - New client library and middleware featureseProsima
 
Qlik What's New - May 2023 リリースの新機能のご紹介
Qlik What's New - May 2023 リリースの新機能のご紹介Qlik What's New - May 2023 リリースの新機能のご紹介
Qlik What's New - May 2023 リリースの新機能のご紹介QlikPresalesJapan
 
FSLogix アプリケーションマスク機能実験結果
FSLogix アプリケーションマスク機能実験結果FSLogix アプリケーションマスク機能実験結果
FSLogix アプリケーションマスク機能実験結果Dai Iwai
 
Java concurrency - Thread pools
Java concurrency - Thread poolsJava concurrency - Thread pools
Java concurrency - Thread poolsmaksym220889
 
Qlik Replicateでのタスクの定義と管理
Qlik Replicateでのタスクの定義と管理Qlik Replicateでのタスクの定義と管理
Qlik Replicateでのタスクの定義と管理QlikPresalesJapan
 
Qlik AutoMLによる機械学習モデル生成の自動化
Qlik AutoMLによる機械学習モデル生成の自動化Qlik AutoMLによる機械学習モデル生成の自動化
Qlik AutoMLによる機械学習モデル生成の自動化QlikPresalesJapan
 
PostgreSQLのバグとの付き合い方 ~バグの調査からコミュニティへの報告、修正パッチ投稿まで~(Open Source Conference 202...
PostgreSQLのバグとの付き合い方 ~バグの調査からコミュニティへの報告、修正パッチ投稿まで~(Open Source Conference 202...PostgreSQLのバグとの付き合い方 ~バグの調査からコミュニティへの報告、修正パッチ投稿まで~(Open Source Conference 202...
PostgreSQLのバグとの付き合い方 ~バグの調査からコミュニティへの報告、修正パッチ投稿まで~(Open Source Conference 202...NTT DATA Technology & Innovation
 
Qlik Alerting で実現する Qlik Sense Enterprise Client-managed (Windows版) の高度でインテリジ...
Qlik Alerting で実現する Qlik Sense Enterprise Client-managed (Windows版) の高度でインテリジ...Qlik Alerting で実現する Qlik Sense Enterprise Client-managed (Windows版) の高度でインテリジ...
Qlik Alerting で実現する Qlik Sense Enterprise Client-managed (Windows版) の高度でインテリジ...QlikPresalesJapan
 
Omnibus731_overview_public20121215
Omnibus731_overview_public20121215Omnibus731_overview_public20121215
Omnibus731_overview_public20121215Yuhki Hanada
 
Qlik Replicateのタスク実行時の操作
Qlik Replicateのタスク実行時の操作Qlik Replicateのタスク実行時の操作
Qlik Replicateのタスク実行時の操作QlikPresalesJapan
 
Oracle Cloud Infrastructure:2021年10月度サービス・アップデート
Oracle Cloud Infrastructure:2021年10月度サービス・アップデートOracle Cloud Infrastructure:2021年10月度サービス・アップデート
Oracle Cloud Infrastructure:2021年10月度サービス・アップデートオラクルエンジニア通信
 
Qlik ReplicateにおけるExpression Builderの利用方法
Qlik ReplicateにおけるExpression Builderの利用方法Qlik ReplicateにおけるExpression Builderの利用方法
Qlik ReplicateにおけるExpression Builderの利用方法QlikPresalesJapan
 
Qlik Senseでデータ変換:はじめてのロードスクリプト
Qlik Senseでデータ変換:はじめてのロードスクリプトQlik Senseでデータ変換:はじめてのロードスクリプト
Qlik Senseでデータ変換:はじめてのロードスクリプトQlikPresalesJapan
 
Oracle Cloud Infrastructure:2023年2月度サービス・アップデート
Oracle Cloud Infrastructure:2023年2月度サービス・アップデートOracle Cloud Infrastructure:2023年2月度サービス・アップデート
Oracle Cloud Infrastructure:2023年2月度サービス・アップデートオラクルエンジニア通信
 

Was ist angesagt? (20)

What is AUTOSAR MCAL? Learn about the software module architecture and device...
What is AUTOSAR MCAL? Learn about the software module architecture and device...What is AUTOSAR MCAL? Learn about the software module architecture and device...
What is AUTOSAR MCAL? Learn about the software module architecture and device...
 
S13 Oracle Database を Microsoft Azure 上で運用する為に~基本事項とベストプラクティス
S13 Oracle Database を Microsoft Azure 上で運用する為に~基本事項とベストプラクティスS13 Oracle Database を Microsoft Azure 上で運用する為に~基本事項とベストプラクティス
S13 Oracle Database を Microsoft Azure 上で運用する為に~基本事項とベストプラクティス
 
Apache Airflow 概要(Airflowの基礎を学ぶハンズオンワークショップ 発表資料)
Apache Airflow 概要(Airflowの基礎を学ぶハンズオンワークショップ 発表資料)Apache Airflow 概要(Airflowの基礎を学ぶハンズオンワークショップ 発表資料)
Apache Airflow 概要(Airflowの基礎を学ぶハンズオンワークショップ 発表資料)
 
Qlik Replicateでのレプリケーション・タスクの監視と制御
Qlik Replicateでのレプリケーション・タスクの監視と制御Qlik Replicateでのレプリケーション・タスクの監視と制御
Qlik Replicateでのレプリケーション・タスクの監視と制御
 
[B31] LOGMinerってレプリケーションソフトで使われているけどどうなってる? by Toshiya Morita
[B31] LOGMinerってレプリケーションソフトで使われているけどどうなってる? by Toshiya Morita[B31] LOGMinerってレプリケーションソフトで使われているけどどうなってる? by Toshiya Morita
[B31] LOGMinerってレプリケーションソフトで使われているけどどうなってる? by Toshiya Morita
 
micro-ROS - New client library and middleware features
micro-ROS - New client library and middleware featuresmicro-ROS - New client library and middleware features
micro-ROS - New client library and middleware features
 
Qlik What's New - May 2023 リリースの新機能のご紹介
Qlik What's New - May 2023 リリースの新機能のご紹介Qlik What's New - May 2023 リリースの新機能のご紹介
Qlik What's New - May 2023 リリースの新機能のご紹介
 
FSLogix アプリケーションマスク機能実験結果
FSLogix アプリケーションマスク機能実験結果FSLogix アプリケーションマスク機能実験結果
FSLogix アプリケーションマスク機能実験結果
 
Java concurrency - Thread pools
Java concurrency - Thread poolsJava concurrency - Thread pools
Java concurrency - Thread pools
 
Qlik Replicateでのタスクの定義と管理
Qlik Replicateでのタスクの定義と管理Qlik Replicateでのタスクの定義と管理
Qlik Replicateでのタスクの定義と管理
 
Oracle GoldenGate Cloud Service(GGCS)概要
Oracle GoldenGate Cloud Service(GGCS)概要Oracle GoldenGate Cloud Service(GGCS)概要
Oracle GoldenGate Cloud Service(GGCS)概要
 
Qlik AutoMLによる機械学習モデル生成の自動化
Qlik AutoMLによる機械学習モデル生成の自動化Qlik AutoMLによる機械学習モデル生成の自動化
Qlik AutoMLによる機械学習モデル生成の自動化
 
PostgreSQLのバグとの付き合い方 ~バグの調査からコミュニティへの報告、修正パッチ投稿まで~(Open Source Conference 202...
PostgreSQLのバグとの付き合い方 ~バグの調査からコミュニティへの報告、修正パッチ投稿まで~(Open Source Conference 202...PostgreSQLのバグとの付き合い方 ~バグの調査からコミュニティへの報告、修正パッチ投稿まで~(Open Source Conference 202...
PostgreSQLのバグとの付き合い方 ~バグの調査からコミュニティへの報告、修正パッチ投稿まで~(Open Source Conference 202...
 
Qlik Alerting で実現する Qlik Sense Enterprise Client-managed (Windows版) の高度でインテリジ...
Qlik Alerting で実現する Qlik Sense Enterprise Client-managed (Windows版) の高度でインテリジ...Qlik Alerting で実現する Qlik Sense Enterprise Client-managed (Windows版) の高度でインテリジ...
Qlik Alerting で実現する Qlik Sense Enterprise Client-managed (Windows版) の高度でインテリジ...
 
Omnibus731_overview_public20121215
Omnibus731_overview_public20121215Omnibus731_overview_public20121215
Omnibus731_overview_public20121215
 
Qlik Replicateのタスク実行時の操作
Qlik Replicateのタスク実行時の操作Qlik Replicateのタスク実行時の操作
Qlik Replicateのタスク実行時の操作
 
Oracle Cloud Infrastructure:2021年10月度サービス・アップデート
Oracle Cloud Infrastructure:2021年10月度サービス・アップデートOracle Cloud Infrastructure:2021年10月度サービス・アップデート
Oracle Cloud Infrastructure:2021年10月度サービス・アップデート
 
Qlik ReplicateにおけるExpression Builderの利用方法
Qlik ReplicateにおけるExpression Builderの利用方法Qlik ReplicateにおけるExpression Builderの利用方法
Qlik ReplicateにおけるExpression Builderの利用方法
 
Qlik Senseでデータ変換:はじめてのロードスクリプト
Qlik Senseでデータ変換:はじめてのロードスクリプトQlik Senseでデータ変換:はじめてのロードスクリプト
Qlik Senseでデータ変換:はじめてのロードスクリプト
 
Oracle Cloud Infrastructure:2023年2月度サービス・アップデート
Oracle Cloud Infrastructure:2023年2月度サービス・アップデートOracle Cloud Infrastructure:2023年2月度サービス・アップデート
Oracle Cloud Infrastructure:2023年2月度サービス・アップデート
 

Andere mochten auch

가상머신 환경에서 리눅스 및 큐브리드 설치 가이드 20150714
가상머신 환경에서 리눅스 및 큐브리드 설치 가이드 20150714가상머신 환경에서 리눅스 및 큐브리드 설치 가이드 20150714
가상머신 환경에서 리눅스 및 큐브리드 설치 가이드 20150714경오 이
 
발표유통혁신으로의모바일과Sns 롯데정보통신
발표유통혁신으로의모바일과Sns 롯데정보통신발표유통혁신으로의모바일과Sns 롯데정보통신
발표유통혁신으로의모바일과Sns 롯데정보통신Kim jeehyun
 
김태영프로필(프로젝트리서치)
김태영프로필(프로젝트리서치)김태영프로필(프로젝트리서치)
김태영프로필(프로젝트리서치)Peter Kim
 
스마트 절전콘센트 큐티 제안서
스마트 절전콘센트 큐티 제안서스마트 절전콘센트 큐티 제안서
스마트 절전콘센트 큐티 제안서대원 곽
 
협업도구 및 주요 Agile practices 적용사례 v1.0
협업도구 및 주요 Agile practices 적용사례 v1.0협업도구 및 주요 Agile practices 적용사례 v1.0
협업도구 및 주요 Agile practices 적용사례 v1.0Sangcheol Hwang
 
Mobile UX Design Essential
Mobile UX Design EssentialMobile UX Design Essential
Mobile UX Design EssentialJunsang Dong
 

Andere mochten auch (7)

가상머신 환경에서 리눅스 및 큐브리드 설치 가이드 20150714
가상머신 환경에서 리눅스 및 큐브리드 설치 가이드 20150714가상머신 환경에서 리눅스 및 큐브리드 설치 가이드 20150714
가상머신 환경에서 리눅스 및 큐브리드 설치 가이드 20150714
 
발표유통혁신으로의모바일과Sns 롯데정보통신
발표유통혁신으로의모바일과Sns 롯데정보통신발표유통혁신으로의모바일과Sns 롯데정보통신
발표유통혁신으로의모바일과Sns 롯데정보통신
 
김태영프로필(프로젝트리서치)
김태영프로필(프로젝트리서치)김태영프로필(프로젝트리서치)
김태영프로필(프로젝트리서치)
 
스마트 절전콘센트 큐티 제안서
스마트 절전콘센트 큐티 제안서스마트 절전콘센트 큐티 제안서
스마트 절전콘센트 큐티 제안서
 
협업도구 및 주요 Agile practices 적용사례 v1.0
협업도구 및 주요 Agile practices 적용사례 v1.0협업도구 및 주요 Agile practices 적용사례 v1.0
협업도구 및 주요 Agile practices 적용사례 v1.0
 
사용자 중심의 소프트웨어 개발을 위한 UI/UX 참조모델 가이드
사용자 중심의 소프트웨어 개발을 위한 UI/UX 참조모델 가이드사용자 중심의 소프트웨어 개발을 위한 UI/UX 참조모델 가이드
사용자 중심의 소프트웨어 개발을 위한 UI/UX 참조모델 가이드
 
Mobile UX Design Essential
Mobile UX Design EssentialMobile UX Design Essential
Mobile UX Design Essential
 

Ähnlich wie CUBRID(큐브리드) 트랜잭션 처리 원리

Let's Play with Data Safely
Let's Play with Data SafelyLet's Play with Data Safely
Let's Play with Data SafelyDataya Nolja
 
데이터야 안전하게 놀아보자.V.1
데이터야 안전하게 놀아보자.V.1데이터야 안전하게 놀아보자.V.1
데이터야 안전하게 놀아보자.V.1Dongchan Sung
 
[2015-06-05] Oracle TX Lock
[2015-06-05] Oracle TX Lock[2015-06-05] Oracle TX Lock
[2015-06-05] Oracle TX LockSeok-joon Yun
 
[2015 05-29] Oracle Lock
[2015 05-29] Oracle Lock[2015 05-29] Oracle Lock
[2015 05-29] Oracle LockSeok-joon Yun
 
제프리 리처의 Windows via C/C++ : 8장 유저 모드에서의 스레드 동기화
제프리 리처의 Windows via C/C++ : 8장 유저 모드에서의 스레드 동기화제프리 리처의 Windows via C/C++ : 8장 유저 모드에서의 스레드 동기화
제프리 리처의 Windows via C/C++ : 8장 유저 모드에서의 스레드 동기화sung ki choi
 
동기화, 스케줄링
동기화, 스케줄링동기화, 스케줄링
동기화, 스케줄링xxbdxx
 
클라우드 환경을 위한 네트워크 가상화와 NSX(기초편)
클라우드 환경을 위한 네트워크 가상화와 NSX(기초편)클라우드 환경을 위한 네트워크 가상화와 NSX(기초편)
클라우드 환경을 위한 네트워크 가상화와 NSX(기초편)Laehyoung Kim
 
Ndc2014 시즌 2 : 멀티쓰레드 프로그래밍이 왜 이리 힘드나요? (Lock-free에서 Transactional Memory까지)
Ndc2014 시즌 2 : 멀티쓰레드 프로그래밍이  왜 이리 힘드나요?  (Lock-free에서 Transactional Memory까지)Ndc2014 시즌 2 : 멀티쓰레드 프로그래밍이  왜 이리 힘드나요?  (Lock-free에서 Transactional Memory까지)
Ndc2014 시즌 2 : 멀티쓰레드 프로그래밍이 왜 이리 힘드나요? (Lock-free에서 Transactional Memory까지)내훈 정
 
[2B7]시즌2 멀티쓰레드프로그래밍이 왜 이리 힘드나요
[2B7]시즌2 멀티쓰레드프로그래밍이 왜 이리 힘드나요[2B7]시즌2 멀티쓰레드프로그래밍이 왜 이리 힘드나요
[2B7]시즌2 멀티쓰레드프로그래밍이 왜 이리 힘드나요NAVER D2
 
시즌 2: 멀티쓰레드 프로그래밍이 왜이리 힘드나요?
시즌 2: 멀티쓰레드 프로그래밍이 왜이리 힘드나요?시즌 2: 멀티쓰레드 프로그래밍이 왜이리 힘드나요?
시즌 2: 멀티쓰레드 프로그래밍이 왜이리 힘드나요?내훈 정
 
Stacks Seoul 2022 - Leo.pdf
Stacks Seoul 2022 - Leo.pdfStacks Seoul 2022 - Leo.pdf
Stacks Seoul 2022 - Leo.pdfHyeongjun Yu
 
120908 레거시코드활용전략 4장5장
120908 레거시코드활용전략 4장5장120908 레거시코드활용전략 4장5장
120908 레거시코드활용전략 4장5장tedypicker
 
Concurrent servers
Concurrent serversConcurrent servers
Concurrent serversTonyYoon12
 
MySQL 상태 메시지 분석 및 활용
MySQL 상태 메시지 분석 및 활용MySQL 상태 메시지 분석 및 활용
MySQL 상태 메시지 분석 및 활용I Goo Lee
 

Ähnlich wie CUBRID(큐브리드) 트랜잭션 처리 원리 (14)

Let's Play with Data Safely
Let's Play with Data SafelyLet's Play with Data Safely
Let's Play with Data Safely
 
데이터야 안전하게 놀아보자.V.1
데이터야 안전하게 놀아보자.V.1데이터야 안전하게 놀아보자.V.1
데이터야 안전하게 놀아보자.V.1
 
[2015-06-05] Oracle TX Lock
[2015-06-05] Oracle TX Lock[2015-06-05] Oracle TX Lock
[2015-06-05] Oracle TX Lock
 
[2015 05-29] Oracle Lock
[2015 05-29] Oracle Lock[2015 05-29] Oracle Lock
[2015 05-29] Oracle Lock
 
제프리 리처의 Windows via C/C++ : 8장 유저 모드에서의 스레드 동기화
제프리 리처의 Windows via C/C++ : 8장 유저 모드에서의 스레드 동기화제프리 리처의 Windows via C/C++ : 8장 유저 모드에서의 스레드 동기화
제프리 리처의 Windows via C/C++ : 8장 유저 모드에서의 스레드 동기화
 
동기화, 스케줄링
동기화, 스케줄링동기화, 스케줄링
동기화, 스케줄링
 
클라우드 환경을 위한 네트워크 가상화와 NSX(기초편)
클라우드 환경을 위한 네트워크 가상화와 NSX(기초편)클라우드 환경을 위한 네트워크 가상화와 NSX(기초편)
클라우드 환경을 위한 네트워크 가상화와 NSX(기초편)
 
Ndc2014 시즌 2 : 멀티쓰레드 프로그래밍이 왜 이리 힘드나요? (Lock-free에서 Transactional Memory까지)
Ndc2014 시즌 2 : 멀티쓰레드 프로그래밍이  왜 이리 힘드나요?  (Lock-free에서 Transactional Memory까지)Ndc2014 시즌 2 : 멀티쓰레드 프로그래밍이  왜 이리 힘드나요?  (Lock-free에서 Transactional Memory까지)
Ndc2014 시즌 2 : 멀티쓰레드 프로그래밍이 왜 이리 힘드나요? (Lock-free에서 Transactional Memory까지)
 
[2B7]시즌2 멀티쓰레드프로그래밍이 왜 이리 힘드나요
[2B7]시즌2 멀티쓰레드프로그래밍이 왜 이리 힘드나요[2B7]시즌2 멀티쓰레드프로그래밍이 왜 이리 힘드나요
[2B7]시즌2 멀티쓰레드프로그래밍이 왜 이리 힘드나요
 
시즌 2: 멀티쓰레드 프로그래밍이 왜이리 힘드나요?
시즌 2: 멀티쓰레드 프로그래밍이 왜이리 힘드나요?시즌 2: 멀티쓰레드 프로그래밍이 왜이리 힘드나요?
시즌 2: 멀티쓰레드 프로그래밍이 왜이리 힘드나요?
 
Stacks Seoul 2022 - Leo.pdf
Stacks Seoul 2022 - Leo.pdfStacks Seoul 2022 - Leo.pdf
Stacks Seoul 2022 - Leo.pdf
 
120908 레거시코드활용전략 4장5장
120908 레거시코드활용전략 4장5장120908 레거시코드활용전략 4장5장
120908 레거시코드활용전략 4장5장
 
Concurrent servers
Concurrent serversConcurrent servers
Concurrent servers
 
MySQL 상태 메시지 분석 및 활용
MySQL 상태 메시지 분석 및 활용MySQL 상태 메시지 분석 및 활용
MySQL 상태 메시지 분석 및 활용
 

CUBRID(큐브리드) 트랜잭션 처리 원리

  • 2. © 2011 CUBRID Co., Ltd. All rights reserved. 목차 1. 트랜잭션이란? 2. 트랜잭션 처리 3. 트랜잭션 격리 수준 4. 잠금 관리 5. 유령읽기란? 6. 스키마 잠금 7. 잠금 상태 확인 8. 느린 질의 탐지 9. 교착상태
  • 3. © 2015 CUBRID Co., Ltd. All rights reserved. 3 1. 트랜잭션이란? 업무적으로 의미가 있는 최소 작업 단위 ex) 계좌이체 UPDATE ACCNT SET AMOUNT = AMOUNT - 500 WHERE ACCNT_NO = 1 ; UPDATE ACCNT SET AMOUNT = AMOUNT + 500 WHERE ACCNT_NO = 2 ; 하나의 트랜잭션으로 수행(일관성) - 동시성이란 여러 개의 트랜잭션이 동시에 수행될 수 있게 하는 성질! 일관성 동시성 Trade-off관계 일관성이 높아지면, 동시성은 떨어진다. 동시성이 높아지면, 일관성은 떨어진다.
  • 4. © 2015 CUBRID Co., Ltd. All rights reserved. 4 2. 트랜잭션 처리 - 커밋과 롤백 커밋 : 하나의 작업에서 진행되는 여러 연산을 모두 반영 롤백 : 하나의 작업에서 진행되는 여러 연산을 모두 취소 - 트랜잭션 관리 잠금 보유자 : Lock을 획득한 보유자 잠금 대기자 : Lock을 획득하려고 대기 중 인자 - 교착 상태 : 여러 개의 트랜잭션이 동시에 수행, 서로 상대방이 사용중인 데이 터를 갱신하려고 대기중인 상태 -> 교착상태 발생시 CUBRID는 트랜잭션 중 가장 최근에 수행된 트랜잭션을 롤백 시켜 자동으로 해결한다. - 잠금 대기 제한시간 : 잠금 대기가 무한정 지속되는 상황을 해결
  • 5. © 2015 CUBRID Co., Ltd. All rights reserved. 5 3. 트랜잭션 격리 수준 - 트랜잭션 격리 수준이란 트랜잭션이 동시에 진행 중일때 "읽기 일관성"을 어느 선까지 보장할 것인지 명시하는 기준 격리수준 일관성 동시성 격리수준 일관성 동시성 - 읽기 일관성에 관련해 발생되는 상황 Dirty Read : Tx1이 아직 커밋 하지 않은 데이터를 Tx2가 그대로 읽음 Non-Repeatale Read : Tx1이 같은 데이터를 반복적으로 Select하는 사이 Tx2가 해당 데이터를 update 혹은 delete시킴 Phantom Read : Tx1이 특정 범위의 데이터를 반복해 읽는 사이 해당 조건을 만족 하는 새로운 데이터를 Tx2가 Insert시킴
  • 6. © 2015 CUBRID Co., Ltd. All rights reserved. 6 3. 트랜잭션 격리 수준 순번 격리 수준 설명 비고 1 Read Uncommited(3) 더티읽기,반복불가능한읽기,유령읽기 허용 Cubrid의 기본 설정임 2 Read Commited(4) 반복불가능한읽기,유령읽기 허용 Oracle의 기본 설정임 3 Repeatable Read(5) 유령읽기 허용 4 Serializable(6) 전부 차단 일관성이 가장 높음 - CUBRID가 제공하는 격리성 수준 - Cubrid의 격리 수준 설정 cubrid.conf파일의 "isolation_level=숫자" 설정 특정 응용프로그램만 설정시에는 "set transaction isolation level 숫자" 명령으로 설정
  • 7. © 2015 CUBRID Co., Ltd. All rights reserved. 7 4. 잠금관리 순번 락 이름 잠금 보유자(Tx1) 잠금 대기자(Tx2) 1 공유 잠금 (S_LOCK) 읽기 중 읽기 가능, 쓰기 불가 2 베타 잠금 (X_LOCK) 갱신 중 읽기 가능, 쓰기 불가 3 갱신 잠금 (U_LOCK) 갱신, 삭제 대상 조회 중 읽기 가능, 쓰기 불가 4 의도 공유 잠금 (IS_LOCK) S_LOCK 획득 시 Table에 IS_LOCK 획득 스키마 변경 불가, 모든 행 갱신 불가, 일부 행 갱신 가능, 모든 행 조회 가능 5 의도 베타 잠금 (IX_LOCK) X_LOCK 획득 시 Table에 IX_LOCK 획득 스키마 변경 불가, 모든 행 갱신 불가, 일부 행 갱신 가능, 모든 행 조회 불가 6 공유 의도 베타 잠 금(SIX_LOCK) IS_LOCK+IX_LOCK 획득 시 SIX_LOCK 획득 스키마 변경 불가, 모든 행 갱신 불가, 일부 행 갱신 불가, 모든 행 조회 불가, 일부 행 조회 가능 7 다음 키 공유 잠금 (NS_LOCK) 삽입 중 자신의 키와 다음 키에 NS_LOCK 획득, 삽입 직 후 다음 키에 NS_LOCK은 해제, 현재 키는 NS_LOCK유 지 읽기 가능, NS_LOCK이 걸려있으면 쓰기 불가 8 다음 키 베타 잠금 (NX_LOCK) 갱신, 삭제 대상 조회 중 대상 건 까지는 X_LOCK, 다음 키 까지는 NX_LOCK 획득 읽기 가능, 쓰기 불가 - Cubrid Lock의 종류(Cubrid 격리 수준 3)
  • 8. © 2015 CUBRID Co., Ltd. All rights reserved. 8 4. 잠금관리 순번 락 이름 잠금 보유자(Tx1) 잠금 대기자(Tx2) 1 공유 잠금 (S_LOCK) 읽기 중 읽기 가능, 쓰기 불가 2 베타 잠금 (X_LOCK) 갱신 중 읽기 불가, 쓰기 불가 3 갱신 잠금 (U_LOCK) 갱신, 삭제 대상 조회 중 읽기 불가, 쓰기 불가 4 의도 공유 잠금 (IS_LOCK) S_LOCK 획득 시 Table에 IS_LOCK 획득 스키마 변경 불가, 모든 행 갱신 불가, 일부 행 갱신 가능, 모든 행 조회 가능 5 의도 베타 잠금 (IX_LOCK) X_LOCK 획득 시 Table에 IX_LOCK 획득 스키마 변경 불가, 모든 행 갱신 불가, 일부 행 갱신 가능, 모든 행 조회 불가 6 공유 의도 베타 잠 금(SIX_LOCK) IS_LOCK+IX_LOCK 획득 시 SIX_LOCK 획득 스키마 변경 불가, 모든 행 갱신 불가, 일부 행 갱신 불가, 모든 행 조회 불가, 일부 행 조회 가능 7 다음 키 공유 잠금 (NS_LOCK) 삽입 중 자신의 키와 다음 키에 NS_LOCK 획득, 삽입 직 후 다음 키에 NS_LOCK은 해제, 현재 키는 NS_LOCK유 지 NS_LOCK이 걸려있으면 읽기 불가, NS_LOCK이 걸려있으면 쓰기 불가 8 다음 키 베타 잠금 (NX_LOCK) 갱신, 삭제 대상 조회 중 대상 건 까지는 X_LOCK, 다음 키 까지는 NX_LOCK 획득 읽기 불가, 쓰기 불가 - Cubrid Lock의 종류(Cubrid 격리 수준 4)
  • 9. © 2015 CUBRID Co., Ltd. All rights reserved. 9 5. 유령읽기란? - 유령읽기(Cubrid 격리수준 3) create table tbl1(id int primary key); insert into tbl1 VALUES (1), (2), (3), (20); 시 간 TX1 TX2 INSERT INTO TBL1 VALUES(8); SELECT * FROM TBL1; 유령 읽기 발생! COMMIT; SELECT * FROM TBL1;
  • 10. © 2015 CUBRID Co., Ltd. All rights reserved. 10 5. 유령읽기란? - 유령읽기(Cubrid 격리수준 6) create table tbl1(id int primary key); insert into tbl1 VALUES (1), (2), (3), (20); 시 간 TX1 TX2 INSERT INTO TBL1 VALUES(8); SELECT * FROM TBL1; COMMIT; SELECT * FROM TBL1; 대기중! 대기풀림 대기중! COMMIT;대기풀림
  • 11. © 2015 CUBRID Co., Ltd. All rights reserved. 11 5. 유령읽기란? - 유령읽기(Cubrid 격리수준 6) create table tbl1(id int primary key); insert into tbl1 VALUES (1), (2), (3), (20); 시 간 TX1 TX2 INSERT INTO TBL1 VALUES(8); SELECT * FROM TBL1 WHERE ID < 10; 대기상태(유령읽기 방지) COMMIT;대기 풀림 SELECT * FROM TBL1 WHERE ID < 10;
  • 12. © 2015 CUBRID Co., Ltd. All rights reserved. 12 6. 스키마 잠금 - 스키마 안정 잠금 (SCH_S) : 질의 컴파일 수행 시 획득, 다른 트랜잭션이 해당 스키마 수정을 방지 - 스키마 수정 잠금 (SCH-M) : DDL 작업 수행 시 획득, 다른 트랜잭션이 수정된 스키마에 접근하는 것을 금지
  • 13. © 2015 CUBRID Co., Ltd. All rights reserved. 13 7. 잠금 상태 확인 - "cubrid lockdb databasename" 명령어 잠금 관련 시스템 파라미터 설정 값 확인 Lock Escalation at : 락 에스컬레이션이 발생하는 조건, 행 잠금 개수와 키 잠금 개수의 합이 100,000개 초과시 행 수준 잠금이 테이블 수준 잠금으로 대 체됨(테이블 잠금으로 대체되면 동시성이 떨어짐) Run Deadlock interval : 교착상태 트랜잭션이 있는지 탐지하는 주기, 1초마 다 교착상태가 있는지 확인 후 둘 중 하나를 자동으로 Rollback 시킴
  • 14. © 2015 CUBRID Co., Ltd. All rights reserved. 14 7. 잠금 상태 확인 - "cubrid lockdb databasename" 명령어 현재 데이터베이스 서버에 접속중인 클라이언트 확인 Transaction : 트랜잭션 정보(ID, 프로그램, 계정@호스트|프로세스번호) Isolation :해당 트랜잭션의 격리수준 State : 트랜잭션의 상태 Timeout_period : 잠금 대기 시간 제한 설정
  • 15. © 2015 CUBRID Co., Ltd. All rights reserved. 15 7. 잠금 상태 확인 - "cubrid lockdb databasename" 명령어 객체 잠금 상태 확인 Current number of objects which are locked : 잠금 객체의 개수 OID : 볼륨번호|페이지번호|슬롯번호 Object type : 객체의 종류, test1은 테이블임 Index name : 인덱스 명 Total mode of holders : tbl1에 NX_LOCK이 잡혀있음 Total mode of waiters : tb1에 NX_LOCK을 얻고 싶은 상태 Num holders : 잠금 개수 Num blocked-holders : 차단된 잠금 개수(상위객체에 의해 차단된 잠금 개수, 예를 들어 X_LOCK보유해서 진짜로 갱신하려니 테이블 락이 걸려있는 상태) Num waiters : 대기자 개수 Lock holder : 잠금 보유자 정보 Lock waiter : 잠금 대기자 정보
  • 16. © 2015 CUBRID Co., Ltd. All rights reserved. 16 여기서 잠깐! Cubrid Oracle update test1 set val=200 where id = 20 and val =20; drop table tbl1; rollback; select val from test1 where id = 20; 결과 = 20 update test1 set val=200 where id = 20 and val =20; drop table tbl1; rollback; select val from test1 where id = 20; 결과 = 200 DDL을 쳐도 Commit 하지 않음 DDL을 치는 순간 커밋!
  • 17. © 2015 CUBRID Co., Ltd. All rights reserved. 17 7. 잠금 상태 확인(INSERT VS EQUAL SELECT) - "cubrid lockdb databasename" 명령어 잠금 상태 확인 실습(cubrid 격리수준 3) create table tbl (id int primary key, a int); insert into tbl values(10, 10); insert into tbl values(20, 20); insert into tbl values(40, 40); 시 간 TX1 TX2 insert into tbl values(30, 30); select * from tbl where id = 30; id = 30,40에 대해 NS_LOCK 획득 id = 30에 대해 X_LOCK 획득
  • 18. © 2015 CUBRID Co., Ltd. All rights reserved. 18 7. 잠금 상태 확인(INSERT VS EQUAL SELECT) - "cubrid lockdb databasename" 명령어 잠금 상태 확인 실습(cubrid 격리수준 4) create table tbl (id int primary key, a int); insert into tbl values(10, 10); insert into tbl values(20, 20); insert into tbl values(40, 40); 시 간 TX1 TX2 insert into tbl values(30, 30); select * from tbl where id = 30; id = 30,40에 대해 NS_LOCK 획득 id = 30에 대해 X_LOCK 획득 id = 30에 대해 S_LOCK을 얻고 싶지만 Tx1이 X_LOCK을 획득해서 대기중
  • 19. © 2015 CUBRID Co., Ltd. All rights reserved. 19 7. 잠금 상태 확인(INSERT VS UPDATE) - "cubrid lockdb databasename" 명령어 잠금 상태 확인 실습 (cubrid 격리수준 3) create table tbl (id int primary key, a int); insert into tbl values(10, 10); insert into tbl values(20, 20); insert into tbl values(40, 40); 시 간 TX1 TX2 insert into tbl values(30, 30); update tbl set a=1000 where id = 30; id = 30,40에 대해 NS_LOCK 획득 id = 30에 대해 X_LOCK 획득 id = 30에 대해 U_LOCK을 얻고 싶지만 Tx1이 X_LOCK을 획득해서 대기중
  • 20. © 2015 CUBRID Co., Ltd. All rights reserved. 20 7. 잠금 상태 확인(INSERT VS UPDATE) - "cubrid lockdb databasename" 명령어 잠금 상태 확인 실습 (cubrid 격리수준 4) create table tbl (id int primary key, a int); insert into tbl values(10, 10); insert into tbl values(20, 20); insert into tbl values(40, 40); 시 간 TX1 TX2 insert into tbl values(30, 30); update tbl set a=1000 where id = 30; id = 30,40에 대해 NS_LOCK 획득 id = 30에 대해 X_LOCK 획득 id = 30에 대해 U_LOCK을 얻고 싶지만 Tx1이 X_LOCK을 획득해서 대기중
  • 21. © 2015 CUBRID Co., Ltd. All rights reserved. 21 7. 잠금 상태 확인(INSERT VS RANGE SELECT) - "cubrid lockdb databasename" 명령어 잠금 상태 확인 실습 (cubrid 격리수준 3) create table tbl (id int primary key, a int); insert into tbl values(10, 10); insert into tbl values(20, 20); insert into tbl values(40, 40); 시 간 TX1 TX2 insert into tbl values(30, 30); select * from tbl where id between 20 and 30; id = 30,40에 대해 NS_LOCK 획득 id = 30에 대해 X_LOCK 획득
  • 22. © 2015 CUBRID Co., Ltd. All rights reserved. 22 7. 잠금 상태 확인 (INSERT VS RANGE SELECT) - "cubrid lockdb databasename" 명령어 잠금 상태 확인 실습 (cubrid 격리수준 4) create table tbl (id int primary key, a int); insert into tbl values(10, 10); insert into tbl values(20, 20); insert into tbl values(40, 40); 시 간 TX1 TX2 insert into tbl values(30, 30); select * from tbl where id between 20 and 30; id = 30,40에 대해 NS_LOCK 획득 id = 30에 대해 X_LOCK 획득 id = 30에 대해 S_LOCK을 얻고 싶지만 Tx1이 X_LOCK을 획득해서 대기중
  • 23. © 2015 CUBRID Co., Ltd. All rights reserved. 23 7. 잠금 상태 확인(INSERT VS RANGE UPDATE) - cubrid lockdb databasename 명령어 잠금 상태 확인 실습 (cubrid 격리수준 3) create table tbl (id int primary key, a int); insert into tbl values(10, 10); insert into tbl values(20, 20); insert into tbl values(40, 40); 시 간 TX1 TX2 insert into tbl values(30, 30); update tbl set a = 1000 where id between 20 and 25; id = 30,40에 대해 NS_LOCK 획득 id = 30에 대해 X_LOCK 획득 id = 30에 대해 NX_LOCK을 얻고 싶지만 Tx1이 NS_LOCK을 획득해서 대기중
  • 24. © 2015 CUBRID Co., Ltd. All rights reserved. 24 7. 잠금 상태 확인(INSERT VS RANGE UPDATE) - cubrid lockdb databasename 명령어 잠금 상태 확인 실습 (cubrid 격리수준 4) create table tbl (id int primary key, a int); insert into tbl values(10, 10); insert into tbl values(20, 20); insert into tbl values(40, 40); 시 간 TX1 TX2 insert into tbl values(30, 30); update tbl set a = 1000 where id between 20 and 25; id = 30,40에 대해 NS_LOCK 획득 id = 30에 대해 X_LOCK 획득 id = 30에 대해 NX_LOCK을 얻고 싶지만 Tx1이 NS_LOCK을 획득해서 대기중
  • 25. © 2015 CUBRID Co., Ltd. All rights reserved. 25 8. 느린 질의 탐지 - cubrid tranlist 명령어 Tran index : 트랜잭션ID(트랜잭션상태) User name : DB사용자 이름 Host name : 장비명 Process id : 트랜잭션을 실행중인 프로세스id Program name : 트랜잭션을 실행중인 프로세스명 Query time : 수행중인 SQL의 총 수행 시간 Tran time : 현재 트랜잭션의 총 수행시간 wait for lock holder : 해당 잠금을 보유중인 트랜잭션ID SQL_ID : SQL Text에 대한 아이디 SQL Text : 수행중인 질의문
  • 26. © 2015 CUBRID Co., Ltd. All rights reserved. 26 8. 느린 질의 탐지 - cubrid killtran 명령어 해당 트랜잭션을 kill시키면 아래와 같이 interrupted되면서 중지됨
  • 27. © 2015 CUBRID Co., Ltd. All rights reserved. 27 9. 교착상태 - 교착상태는 둘 이상의 트랜잭션이 서로 자신의 리소스를 놓지 않으면서 상대방의 리소스를 원 할때 발생한다. - 교착상태 발생 가능성이 높은 상황 질의 수행이 느린 경우 잠금 대기 시간이 길어지는 경우 어플리케이션의 로직 문제 한 테이블에 인덱스가 많아 키 잠금이 많아지는 경우 - 교착상태 발생 가능성을 낮추기 위한 조치 트랜잭션을 가급적 짧게 정의할 것 테이블 액세스 순서를 동일하게 할 것 DML질의인 경우 full table scan에 유의 할 것
  • 28. © 2015 CUBRID Co., Ltd. All rights reserved. 28 9. 교착상태 - 교착상태 발생 케이스 (cubrid 격리수준 3,4) create table tbl3 (id int); create index ix_tbl3_id on tbl3(id); insert into tbl3 values (10), (20), (30), (40); commit; 시 간 TX2 update tbl3 set id = 35 where id = 10; update tbl3 set id=15 where id = 30; TX1 [2번] id = 40에 대해 NX_LOCK 획득 [1번] id = 20에 대해 NX_LOCK 획득 [4번] id = 20에 대해 NX_LOCK 획득 [3번] id = 40에 대해 NX_LOCK 획득 [1번] -> [3번] -> [2번] -> [4번] 순서로 작업이 진행되면 교착상태 발생!
  • 29. © 2015 CUBRID Co., Ltd. All rights reserved. 29 9. 교착상태 교착 상태 확인 실습(2개의 트랜잭션) (cubrid 격리수준 3,4) create table tbl (id int primary key, a int); insert into tbl values(10, 10); insert into tbl values(20, 20); insert into tbl values(40, 40); 시 간 TX1 TX2 insert into tbl values(30, 30); update tbl set a = 1000 where id between 20 and 25; id = 30,40에 대해 NS_LOCK 획득 id = 30에 대해 X_LOCK 획득 id = 30에 대해 NX_LOCK을 얻고 싶지만 Tx1이 NS_LOCK을 획득해서 대기중 update tbl set a = 2000 where id = 20; id = 20에 대해 U_LOCK을 얻고 싶지만 Tx2가 X_LOCK을 획득해서 대기 교착상태 자동감지로 인해 트랜잭 션이 자동 종료됨
  • 30. © 2015 CUBRID Co., Ltd. All rights reserved. 30 9. 교착상태 교착 상태 확인 실습(3개의 트랜잭션) (cubrid 격리수준 3,4) create table tbl (id int primary key, a int); insert into tbl values(10, 10), (20, 20), (30,30); 시 간 TX1 TX2 insert into tbl values(40, 40); update tbl set a=2000 where id = 30; id = 40에 대해 NS_LOCK 획득 id = 40에 대해 X_LOCK 획득 id = 40에 대해 NX_LOCK을 얻고 싶지만 Tx1이 NS_LOCK을 획득해서 대기중 TX3 update tbl set a=2500 where id between 20 and 30; id = 30 에 대해 tx2가 U_LOCK을 잡고 있어서 U_LOCK획득 대기중 update tbl set a=1000 where id=10; id = 20에 대해 NX_LOCK을 얻고 싶지만 Tx3가 NX_LOCK을 획득해서 대기 교착상태 자동감지로 인해 트랜잭 션이 자동 종료됨

Hinweis der Redaktion

  1. 안녕하세요. 금일 “큐브리드 개발자 중급과정" 교육을 진행 할 큐브리드 ????입니다. 인사 드리겠습니다. 꾸벅 여기 참석하신 분들은 큐브리드를 활용하여 프로젝트를 진행 할 계획이 있는 분들도 있고, DB에 대해서 공부하고자 참석한 학생분들도 있을겁니다. 오늘 교육을 통해서 큐브리드DB에 대해서 많은 내용을 습득하고 갔으면 하는 바램입니다.
  2. 교육 목차입니다. 전체 교육 소요시간은 약 4시간 정도입니다. 1 소개 : ~ 6 2 구조 : 7 ~ 14 3 설치 및 설정 : 15 ~ 25 1교시 4 구동 및 종료 : 26 ~ 34 5 DDL : 35 ~ 44 6 DML : 45 ~ 58 2교시 7 연산자와 함수 : 59 ~ 87 8 사용자와 권한 : 88 ~ 92 9 응용연결설정 : 93 ~ 98 3교시 10 CUBRID HA 주의사항 : 99 ~ 100 11 데이타베이스생성 : 101 ~ 106 12 모니터링 : 107 ~ 110 13 트랜잭션 관리 : 111 ~ 114 4교시
  3. 큐브리드는 오픈소스 라이선스입니다. 즉, 사용하는 것에 대해서 별도의 비용이 발생하지 않습니다. 큐브리드는 두가지 라이선스 규칙을 따르고 있는데요. 위에 보이는 Interfaces 부분과 큐브리드 툴은 BSD 라이선스를 채택하고 있습니다. 인터페이스 부분은 JDBC와 같이 DB접속을 위해서 사용하는 모듈을 말합니다. 큐브리드 툴은 DB관리를 하는 큐브리드 매니저와 개발 시에 쿼리실행 결과를 볼 수 있는 쿼리브라우저가 있습니다. BSD(Berkeley Software Distribution) 라이선스는 프로그램의 자유로운 복제, 수정, 사용, 배포를 허용합니다. 여기 있는 분들이 큐브리드를 사용하여 프로그램을 만들어서 배포 하더라도 별도의 라이선스 비용이 발생하지 않습니다. 아래 부분의 큐브리드 서버는 GPL(GNU General Public License) 라이선스를 따르고 있습니다. GPL 라이선스는 소프트웨어의 자유로운 복제, 사용, 수정, 배포를 허용합니다. 단, 수정/배포 시에는 소스를 공개해야 합니다. 그림에는 큐브리드 서버가 간략하게 표시되어 있지만, 세부 내용은 다음장의 “큐브리드 구조”에서 보다 상세히 설명 드리겠습니다.