ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Transaction Isolation Level(트랜잭션 격리 수준)
    CS 지식/데이터베이스(Database) 2023. 4. 25. 17:37

    Database Anomalies

    1. Dirty read

    - 다른 transaction에 의해 수정 됐지만 아직 commit 되지 않은 데이터를 읽는 것

    ex) Transaction A가 새로운 row를 추가하고 Transaction B가 새로운 row를 읽었는데 A가 roll back을 한 경우

     

    2. Nonrepeatable read

    - 한 transaction 내에서 같은 row를 두 번 읽었는데 그 사이에 값이 변경되거나 삭제되어 결과가 다르게 나타나는 현상

    ex) Transaction A가 row를 읽고 Transaction B가 그 row를 변경하고 A가 같은 row를 두 번째 읽었을 때 새로운 결괏값을 얻는 경우 

     

    3. Phantom read

    한 transaction 내에서 같은 쿼리를 두 번 실행했는데, 첫번째 쿼리에서 없던 유령 record가 두 번째 쿼리에서 나타나는 현

    ex) Transaction A가 WHERE 절에 해당하는 모든 row를 읽어들이고 Transaction B가 WHERE 절을 만족하는 추가적인 row를 insert 한 후 A가 WHERE 절을 다시 검색했을 때 additional 한 row가 추가되는 경우

     

    + 4. serialization anomaly

    The result of successfully committing a group of transactions is inconsistent with all possible orderings of running those transactions one at a time(한 번에 하나씩).

     

     


     

    Transaction Isolation Level 4단계

    1. READ UNCOMMITTED

    - uncommitted 된 변화도 transaction은 다 볼 수 있음.

    - 모든 database anomalies 다 발생 가능함.

     

    2. READ COMMITTED

    - transaction이 committed되기 전까지 transaction 내에서 일어난 변화는 외부에 관찰되지 않음. 

    - dirty read 방지

     

    3. REPEATABLE READ

    - read lock을 획득한 row들그 transaction이 완전히 끝나기 전까지는 다른 transaction이 그 row들을 수정하지 못하도록 하는 것. 

    - phantom read, serialization anomaly는 여전히 발생 가능

    ex) InnoDB의 default isolation level

     

    4. SERIALIZABLE

    - transaction을 위해 table들이 lock 되어서 WHERE 조건이 다른 transaction에 의해 값이 추가되거나 값이 제거되는 등 수정되지 않는 것.

    - 가장 엄격한 격리 수준. 

    - transaction들이 동시에 일어나지 않고, 하나씩 순서대로 실행되는 것처럼 작동

    - 읽기 작업에도 lock을 설정하게 되고, 동시에 다른 transaction에서 이 record를 변경하지 못하게 됨

    => 동시 처리 능력이 다른 isolation level보다 떨어지고, 성능 저하가 발생

    - 모든 database anomaly 방지 

     

     

    https://www.postgresql.kr/docs/13/transaction-iso.html

     

     

     

     

    Reference

    'CS 지식 > 데이터베이스(Database)' 카테고리의 다른 글

    statement vs prepared statement vs callable statement interface  (0) 2023.05.04
    Transaction  (0) 2023.04.25
    SQL vs NoSQL  (0) 2023.04.21
    SQL - injection  (2) 2023.04.19
    Relational Model과 Key의 종류  (0) 2023.04.17
Designed by Tistory.