DB 트랜잭션

유수민·2022년 7월 10일
0

지식창고

목록 보기
16/64
post-thumbnail

📌트랜잭션

  • 하나의 작업을 수행하기 위해 필요한 데이터베이스의 연산들을 모아놓은 것 ex) commit, rollback
    → 디비에 반영되는 시점은 트랜잭션 연산이 성공적으로 완료되는 시점이라 할 수 있다. ( 쿼리를 날리면 바로 반영되는 것이 아니다. )

  • 데이터베이스에서 논리적인 작업의 단위( SELECT,INSERT,DELETE,UPDATE )이며 장애가 발생했을때 데이터를 복구하는 작업의 단위

  • 다수의 사용자가 동시에 사용할 수 있도록 제어작업을 하는데 중요한 단위

📌DB 트랜잭션이 필요한 이유는?

DB서버에 여러개의 클라이언트가 동시에 액세스 하거나 응용프로그램이 갱신을 처리하는 과정에서 중단될 수 있는 경우들에 의한 데이터의 부정합을 발생하는 것을 방지하기 위해 등장 했다.
부정합이 발생하지 않으려면 프로세스를 병렬로 처리하지 않도록 하여 한번에 하나의 프로세스만 처리하도록 하면 되는데, 이는 효율이 떨어진다. 따라서 병렬로 처리할 수 밖에 없는 현실적인 상황으로 인해 부정합을 방지하고자 트랜잭션을 사용하는 것이다

📌DB 트랜잭션의 특징

📖1. 원자성

트랜잭션은 전체가 수행되거나 또는 전혀 수행되지 않아야 한다.
→ 롤백 세그먼트에 의해 보장된다.

  • 수행하고 있는 트랜잭션에 의해 변경된 내역을 유지하면서, 이전에 commit한 상태를 임시영역에 따로 저장한다.
  • 현재 수행하고 있는 트랜잭션에서 오류가 발생하면서 현재 내역을 날려버리고 임시영역에 저장했던 상태로 rollback한다.
  • 트랜잭션의 길이가 길 경우, 오류가 나더라도 확실한 부분에 대해서는 rollback되지 않도록 중간저장 지점인 save point도 지정가능하다.

롤백 세그먼트(rollback segment) : 이전 데이터들이 임시로 저장되는 영역

📖2. 일관성

트랜잭션을 수행하기 전이나 후나 데이터베이스는 항상 일관된 상태를 유지해야 한다. → 트리거(Trigger)를 통해 보장된다.

특정 테이블에 삽입, 수정, 삭제 등의 데이터 변경 이벤트가 발생하면 DBMS에서 자동적으로 실행 되도록 구현된 프로그램으로, 트랜잭션 연산에 일관성을 위배시키는 작업이 있더라도, 이를 방지하기 위한 트리거를 적용해 놓음으로써 문제가 되지 않게 한다. 트리거는 자동 commit, rollback이다.

📖3. 지속성

트랜잭션의 성공 결과 값은 장애발생 후에도 변함없이 보관되어야 한다.

📖4. 고립성

수행중인 트랜잭션에 다른 트랜잭션이 끼어들어 변경 중인 데이터값을 훼손하지 않아야 한다. → lock & excute unlock을 통해 보장

데이터를 읽거나 쓸때는 문을 lock해서 다른 트랜잭션이 접근하지 못하도록 고립성을 보장하고, 수행을 마치면 unlock을 통해 데이터를 다른 트랜잭션이 접근할 수 있도록 허용하는 방식이다.

  • shared_lock : 데이터 쓰기를 허용하지 않고 오직 읽기만 허용하는 기능
  • exclusive_lock : 데이터를 쓸때는 다른 트랜잭션이 읽을 수도 쓸 수도 없도록 하는 기능

📌트랜잭션 사용할때 주의할 점은?

트랜젝션은 서로 간섭 없이 독립적으로 수행되어야 하는데, 이때 lock과 unlock을 잘못 사용하면 데드락 상태에 빠질 수 있다. → 성능 하락의 원인

📌데드락을 극복하는 방법은 없을까?

📖MVCC(Multiversion Concurrency Control, 다중 버전 동시성 제어)

수정되는 모든 데이터를 별도 복사본(SnapShot)으로 관리하는 것을 말한다. 복사본을 이용하기 때문에 Locking을 필요로 하지 않아 일반적인 RDBMS보다 더 빠른 동작이 가능하고 데이터를 읽기 시작할 때 그 데이터를 삭제, 수정하더라도 영향을 받지 않고 데이터를 사용할 수 있다.
→ 잠금을 사용하지 않는 일관된 읽기 제공

profile
배우는 것이 즐겁다!

0개의 댓글