트랜잭션 격리 레벨에 대해 설명해주세요.

JISU LIM·2023년 11월 21일
0

CS-Tech

목록 보기
11/16
post-thumbnail
post-custom-banner

🚀 트랜잭션 격리 레벨에 대해 설명해주세요.

  • SQL 표준에서 정의한 3가지 이상 현상(dirty read, non-repeatable read, phantom read)에 대한 허용 수준입니다.

    • dirty read는 여러 트랜잭션이 실행되는 과정에서 아직 커밋되지 않은 데이터를 읽었을 때의 이상 현상을 의미합니다.
    • non-repeatable read는 두 번의 읽기 연산을 수행하는 트랜잭션을 실행할 때 다른 트랜잭션에 의해 각 연산의 결과가 달라지는 이상 현상을 의미합니다.
    • phantom read는 두 번의 읽기 연산을 수행하는 트랜잭션을 실행할 때 다른 트랜잭션에 의해 첫 번째 읽기 연산에서 보이지 않았던 데이터가 두 번째 읽기 연산에서 보이는 이상 현상을 의미합니다.
  • 허용 수준에 따라 트랜잭션 격리 레벨(isolation level)을 다음과 같이 정의할 수 있습니다.

    Dirty readNon-repeatable readPhantom read
    Read uncommittedOOO
    Read committedXOO
    Repeatable readXXO
    SerializableXXX

🔴 모든 DBMS가 4개의 레벨을 모두 구현하고 있나요? 그렇지 않다면 그 이유는 무엇일까요?

  • MySQL, Oracle, Postgresql 등 각 DBMS의 Isolation 레벨 구현은 모두 다르고, 같은 수준이더라도 그 구현은 다를 수 있습니다.
  • Isolation 레벨이 높을 수록 트랜잭션 처리 과정에서 제약이 발생해 처리량이 감소하기 때문입니다. 따라서 작업을 수행하고자 하는 Task에 따라 처리량과 데이터의 일관성을 타협하여 레벨을 설정해야 합니다.
  • InnoDB를 지원하는 MySQL의 경우 위에서 언급한 4개의 레벨을 모두 구현하고 있습니다.

🟠 만약 MySQL을 사용하고 있다면, (InnoDB 기준) Undo 영역과 Redo 영역에 대해 설명해주세요

  • Undo 영역은 UPDATE나 DELETE로 데이터를 변경했을 때 변경되기 이전의 데이터를 보관하는 영역입니다.
  • Redo 영역은 DB상의 변경된 내용을 순차적으로 디스크에 기록하는 로그 파일이 저장되는 영역입니다.

🟡 스토리지 엔진이 정확히 무엇을 하는 건가요?

  • 스토리지 엔진은 DBMS가 데이터를 삽입, 추출, 업데이트, 삭제(CRUD)하는 데 사용하는 기본 소프트웨어 컴포넌트 입니다.
  • 즉, DB에서 데이터를 어떻게 저장하고 접근할 것인지에 대한 기능을 제공합니다.

🙏 본 개념의 정리에 대한 피드백과 질문은 환영입니다!

✏️ Tech Interview Study

본 개념의 다른 정리 및 피드백, 인터뷰 주제의 순서는 테크 인터뷰 스터디 Repository에서 확인 가능합니다.

📚 REFERENCE

유튜브 - transaction isolation level 설명합니다! isolation이 안될 때 나타날 수 있는 여러 현상들과 snapshot isolation도 같이 설명합니다!!

깃블로그 - [db] 트랜잭션 격리 수준(isolation level)

티스토리 - [MySQL] InnoDB 언두(Undo) 로그와 MVCC란 무엇일까?

티스토리 - 데이터베이스 엔진이란?

profile
Grow Exponentially
post-custom-banner

0개의 댓글