본문 바로가기
컴퓨터공학/데이터베이스

[데이터베이스] 트랜잭션과 ACID 성질

by 독서왕뼝아리 2023. 8. 19.

데이터베이스의 상태를 변화시키는 하나의 논리적인 작업 단위, 하나의 트랜잭션은 Commit 또는 Rollback 된다.

ACID

데이터의 무결성과 안정성을 보장하기 위해 트랜잭션이 지녀야 하는 성질!

Atomicity 원자성 : All or Nothing 트랜잭션 결과가 데이터베이스에 모두 반영되거나 반영되지 않아야 하는 성질

Consistency 일관성 : 트랜잭션 수행 전후 데이터베이스는 일관된 상태를 가져야 하는 성질

Isolation 독립성 : 모든 트랜잭션은 다른 트랜잭션부터 독립되야 하는 성질

Durability 영속성 : 트랜잭션이 성공적으로 수행되었다면 그 결과는 영구적으로 기록되는 성질

  • 永續性 영속성 : 영원히 지속되는 성질이나 능력
  • 無缺性 무결성 : 데이터의 정보가 변경되거나 오염되지 않도록 하는 원칙. 네트워크에서 데이터 전송 시 비인가 접속자가 데이터를 변경하거나 위조하지 않았다는 것을 나타낸다.

ACID 하기 위해서공유락 (Shared Lock)

다른 트랜잭션의 읽기 허용 / 쓰기 불허

write lock이라고도 함

Shared Lock은 select 절 뒤에 for share을 붙여서 만들 수 있다.

배타락 (Exclusive Lock)

다른 트랜잭션의 읽기 불허 / 쓰기 불허

read lock이라고도 함

Exclusive Lock은 select 절 뒤에 for update를 붙여서 만들 수 있다.

→ Race Condition이 발생하면 특정 트랜잭션을 블로킹함

동시성 관련 문제

  • dirty read

uncommit된 데이터를 읽었는데, 트랜잭션이 abort가 됐을 때 문제가 발생

  • phantom read

행을 읽으려고 할 때 다른 트랜잭션이 삽입이나 삭제하여 발생하는 문제

  • non-repeatable read

트랜잭션A가 끝나기 전에 다른 트랜잭션B가 데이터를 변경함으로써 발생하는 문제. 트랜잭션A가 같은 데이터를 반복적으로 읽으면 값이 달라짐.

트랜잭션 고립 수준

트랜잭션들끼리 일관성 있는 데이터를 얼마나 허용할 것인지 정해놓은 수준

위와 같은 문제를 전부 방어할 수 있지만, 제약사항이 많아져서 트랜잭션 동시처리량이 떨어져서 DB성능이 하락하게 됨. → 동시성과 정합성의 트레이드 오프

Serializable : 위 현상뿐만 아니라 아예 이상현상이 일어나지 않는 레벨을 의미

→ 1992년 발표된 SQL 표준(Standard SQL), but 1995년에 이 isolation level을 비판하는 논문 출고(이상현상 기준이 모호하다, 이상현상은 더 많다, 실무에서 사용하는 방법이 반영되지 않았다)