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
운영게시판
최근게시물
Informix Tutorials 1522 게시물 읽기
 News | Q&A | Columns | Tutorials | Devel | Files | Links
No. 1522
isolation Levels 설명
작성자
정재익(advance)
작성일
2002-10-19 19:40:41
조회수
8,606

isolation Levels 설명

 

Read Concurrency : Four isolation Levels

 

원본출처 : 딧세님홈페이지 (http://informix.we.ro/)

 

- Dirty Read

. No lock check (∴ dirty data일 수 있다)

. No lock (∴ data가 변할 수 있다)

 

- Committed Read

. Lock check (∴ 적어도 commit data)

. No lock

 

- Cursor Stability

. Lock check

. Row lock (cursor가 읽고있는 data)

. cursor를 사용하지 않으면 Committed read와 같다.

 

- Repeatable Read

. 질의에 만족하는 모든 row를 lock

 

- Setting the Level of isolation

. SET ISOLATION TO [dirty read, committed read, cursor stability,

repeatable read]

. logging mode가 아닌 경우는 Dirty Read고 바꿀 수 없다

. session이 살아있는 동안 유지된다.

 

 

- TEST

. 전체 환경 :

CREATE TABLE customer (num serial,

name char(10));

data : 18개

row size : 134byte (index 2개) 즉, 7개의 data의 크기 1024byte

14개의 data의 크기 2048byte

page size : 2048byte

 

 

. LOCK MODE ROW

 

① User1 : DECLARE cur_name CURSOR FOR select * from customer

where num < 118

OPEN CURSOR cur_name

WHILE TRUE

FETCH cur_name into p_variable

IF STATUS = NOTFOUND THEN EXIT WHILE END IF

END WHILE

 

User2 : update customer

set fname = “data_value”

where customer_num = “key_value”

 

- SET ISOLATION TO repeatable read, cursor stability, committed read 에 관계 없이 lock을 걸지 않고 모든 DATA 수정 가능

 

② User1 : DECLARE cur_name CURSOR FOR select * from customer

where num < 118

BEGIN WORK

OPEN CURSOR cur_name

WHILE TRUE

FETCH cur_name into p_variable

IF STATUS = NOTFOUND THEN EXIT WHILE END IF

END WHILE

COMMIT WORK

 

User2 : update customer

set fname = “data_value”

where customer_num = “key_value”

 

- COMMITED READ : LOCK이 걸리지 않기 때문에 모든 DATA 수정 가능

- CURSOR STABILITY : 현행 DATA만 LOCK이 걸림.

즉 104번의 DATA를 FETCH 하였을 때 103번 105번 DATA 수정 가능

- REPEATABLE READ : 현행 DATA PAGE에 1024BYTE 만큼의 LOCK이 걸려있음.

즉 103번의 DATA를 FETCH 하였을 때 101-107번 까지는 수정 불가

108번 이후는 수정 가능

또한 108번의 DATA를 FETCH 하였을 때 이전의 DATA는 LOCK이 유지됨.

 

③ User1 : DECLARE cur_name CURSOR FOR select * from customer

where num < 118 FOR UPDATE

BEGIN WORK

OPEN CURSOR cur_name

WHILE TRUE

FETCH cur_name into p_variable

IF STATUS = NOTFOUND THEN EXIT WHILE END IF

END WHILE

COMMIT WORK

 

User2 : update customer

set fname = “data_value”

where customer_num = “key_value”

 

- COMMITED READ : 현행 RECORD

- CURSOR STABILITY : 현행 RECORD

즉 이전 이후의 RECORD의 DATA를 다른 사용자가 수정 가능

- REPEATABLE READ : 현재 읽은 DATA RECORD와 이전에 읽었던 RECORD에 대해

서 LOCK 유지

 

. LOCK MODE ROW

 

① User1 : DECLARE cur_name CURSOR FOR select * from customer

where num < 118

OPEN CURSOR cur_name

WHILE TRUE

FETCH cur_name into p_variable

IF STATUS = NOTFOUND THEN EXIT WHILE END IF

END WHILE

 

User2 : update customer

set fname = “data_value”

where customer_num = “key_value”

 

- SET ISOLATION TO repeatable read, cursor stability, committed read 에 관계 없이 lock을 걸지 않고 모든 DATA 수정 가능

 

② User1 : DECLARE cur_name CURSOR FOR select * from customer

where num < 118

BEGIN WORK

OPEN CURSOR cur_name

WHILE TRUE

FETCH cur_name into p_variable

IF STATUS = NOTFOUND THEN EXIT WHILE END IF

END WHILE

COMMIT WORK

 

User2 : update customer

set fname = “data_value”

where customer_num = “key_value”

 

- COMMITED READ : LOCK이 걸리지 않기 때문에 모든 DATA 수정 가능

- CURSOR STABILITY : 현행 DATA가 있는 PAGE에 LOCK이 걸림.

즉 104번의 DATA를 FETCH 하였을 때 103번 105번 114번 115번 DATA 수정 가능

즉 115번 DATA RECORD를 FETCH 하였을 때 101 – 114번 까지의 DATA 수정 가능

물리적으로 한 PAGE는 14개의 DATA를 포함

- REPEATABLE READ : 현행 DATA의 PAGE에 대해 LOCK이 걸려있음.

즉 103번의 DATA를 FETCH 하였을 때 101-114번 까지는 수정 불가

115번 이후는 수정 가능

또한 108번의 DATA를 FETCH 하였을 때 이전의 DATA는 LOCK이 유지됨.

 

③ User1 : DECLARE cur_name CURSOR FOR select * from customer

where num < 118 FOR UPDATE

BEGIN WORK

OPEN CURSOR cur_name

WHILE TRUE

FETCH cur_name into p_variable

IF STATUS = NOTFOUND THEN EXIT WHILE END IF

END WHILE

COMMIT WORK

 

User2 : update customer

set fname = “data_value”

where customer_num = “key_value”

 

- COMMITED READ : 현행 PAGE

- CURSOR STABILITY : 현행 PAGE

즉 이전 이후의 RECORD의 DATA를 다른 사용자가 수정 가능

- REPEATABLE READ : 현재 읽은 DATA RECORD와 이전에 읽었던 RECORD PAGE

에 대해서 LOCK 유지

[Top]
No.
제목
작성자
작성일
조회
1525Logging Mode information
정재익
2002-10-19
8605
1524arcunload 사용하는 법
정재익
2002-10-19
7088
1523Update statistics and OPTCOMPIND 설명
정재익
2002-10-19
9450
1522isolation Levels 설명
정재익
2002-10-19
8606
1521SQL성능향상을위한방법
정재익
2002-10-19
10927
1520체크포인트
정재익
2002-10-19
8699
1519session's lock release
정재익
2002-10-19
13152
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2019 DSN, All rights reserved.
작업시간: 0.071초, 이곳 서비스는
	PostgreSQL v11.5로 자료를 관리합니다