본문 바로가기
학부 전공/DB

SQL - ISOLATION LEVEL & Dirty read

by 장어진 2021. 6. 19.

ISOLATION LEVEL)

SET TRANSACTION ISOLATION LEVEL SERIALIZABLE; (default of SQL standard)

– Phantom tuples are forbidden (보장하는 것, 밑의 단계로 내려가면 보장 X)

• SET TRANSACTION ISOLATION LEVEL REPEATABLE READ;

– Reads are repeatable

• SET TRANSACTION ISOLATION LEVEL READ COMMITTED; (default of many DBMS’s)

– Dirty reads are forbidden (속도를 위해 대부분의 이 값을 디폴트로 선언)

• SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;

– Dirty reads are acceptable

 

Dirty read)

Dirty data를 읽는 것을 말합니다. T1T2라는 각각 다른 트랜잭션이 있을 때 T2 트랜잭션에서 T1의 데이터 정보를 읽어 사용하는 것을 말합니다. 이게 문제가 되는 이유는 T1이라는 트랜잭션에서 어떤 데이터를 수정하는 중이었는데 T2라는 트랜잭션이 이를 읽고 COMMIT으로 설정을 했는데 T1에서 ROLLBACK을 선언하면 T2가 읽은 T1에 있던 데이터 값이 사라지는 현상이 발생하기 때문입니다.

간단 예시입니다. 오른쪽의 표를 보는 것처럼 A3550달러가 추가되었고 그 다음 A2A1으로부터 돈을 받아 350달러가 되었고 따라서 A2A3에 보낼 250달러가 충분하게 되지만 A1의 경우 돈이 충분하지 않아 A2에게 돈을 보낼 수 없습니다. 하지만 A2의 경우 A1으로부터 이미 값을 받아 돈이 충분해 A3에게 250달러를 보내게 됩니다. 이 과정이 DIRTY READ의 한 과정입니다. 이를 허용해도 되는 어플리케이션이 존재하지만 생명이나 은행과 같이 중요한 곳에서는 SERIALIZABLE LEVEL으로 해야합니다.

728x90

'학부 전공 > DB' 카테고리의 다른 글

SQL - 제약과 트리거 1  (0) 2021.06.19
SQL - Index & View Definition  (0) 2021.06.19
SQL - Transaction 실제 사용 예시  (0) 2021.06.19
SQL - Transaction 개념 및 정리  (0) 2021.06.19
Databas Modifications - Updates(SQL)  (0) 2021.06.19