Database

Database

Transation

  • 트랜잭션은 업무 처리를 위한 논리적인 작업 단위
  • 작업의 논리적 단위가 단일 연산이 아닐 수 있음
  • 은행의 “계좌이체” 트랜잭션을 예를 들면, 하나의 예금 계좌에서 인출하여 다른 예금 계좌에 입금하는 일련의 작업을 하나의 단위로 수행

ACID

  • Atomicity(원자성)
    • 트랜젹션은 더 이상 분해가 불가능한 업무의 최소단위이므로, 전부 처리되거나 아예 하나도 처리되지 않아야 함
    • 트랜잭션의 모든 연산들이 정상적으로 수행 완료되거나 아니면 전혀 어떠한 연산도 수행되지 않은 상태를 보장
  • Consistency(일관성)
    • 트랜잭션의 수행을 데이터베이스 상태 간의 전이(transition)로 봤을 때, 트랜잭션 수행 전후의 데이터베이스 상태는 각각 일관성이 보장
    • 일관된 상태의 데이터베이스에서 하나의 트랜잭션을 성공적으로 완료하고 나면 그 데이터베이스는 여전히 일관된 상태여야 함
    • 트랜잭션 실행의 결과로 데이터베이스 상태가 모순되지 않아야 함
  • Isolation(격리성)
    • 여러 트랜잭션이 동시에 수행되더라도 각각의 트랜잭션은 다른 트랜잭션의 수행에 영향을 받지 않고 독립적으로 수행
    • 실행 중인 트랜잭션의 중간결과를 다른 트랜잭션이 접근할 수 없음
  • Durability(영구성)
    • 트랜잭션이 성공적으로 완료되어 커밋되고 나면, 해당 트랜잭션에 의한 모든 변경은 향후에 어떤 소프트웨어나 하드웨어 장애가 발생되더라도 보존
    • 트랜잭션이 일단 그 실행을 성공적으로 완료하면 그 결과는 데이터베이스에 영속적으로 저장

낮은 단계의 격리성 수준에서 발생할 수 있는 현상

  • Dirty Read
    • 다른 트랜잭션에 의해 수정됐지만 아직 커밋되지 않은 데이터를 읽는 것을 말함
    • 변경 후 아직 커밋되지 않은 값을 읽었는데 변경을 가한 트랜잭션이 최종적으로 롤백된다면 그 값을 읽은 트랜잭션은 비일관성 상태에 놓임
  • Non Repeatable Read
    • 한 트랜잭션 내에서 같은 쿼리를 두 번 수행했는데, 그 사이에 다른 트랜잭션이 값을 수정 또는 삭제하는 바람에 두 쿼리 결과가 다르게 나타나는 현상
  • Phantom Read
    • 한 트랜잭션 내에서 같은 쿼리를 두번 수행했는데, 첫 번째 쿼리에서 없던 유령 레코드가 두번째 쿼리에서 나타나는 현상

Transaction Isolation Level

  • Read uncommitted
    • 트랜잭션에 처리중인 혹은 아직 커밋되지 않은 데이터를 다른 트랜잭션이 읽는 것을 허용
    • 어떤 사용자가 A라는 데이터를 B라는 데이터로 변경하는 동안 다른 사용자는 B라는 아직 완료되지 않은(Uncommitted 혹은 Dirty) 데이터 B를 읽을 수 있음
  • Read committed
    • 트랜잭션이 커밋되어 확정된 데이터만을 읽는 것을 허용
    • dirty read 방지
  • Repeatable read
    • 하나의 트랜잭션이 읽는 로우를 다른 트랜잭션이 수정하는 것을 막음
    • 트랜잭션이 완료될 때까지 SELECT 문장이 사용하는 모든 데이터에 shared lock이 걸리므로 다른 사용자는 그 영역에 해당되는 데이터에 대한 수정이 불가능
    • 선행 트랜잭션이 읽은 데이터는 트랜잭션이 종료될 때까지 후행 트랜잭션이 갱신하거나 삭제하는 것을 불허함으로써 같은 데이터를 두 번 쿼리했을 때 일관성 있는 결과를 리턴함
  • Serializable
    • 트랜잭션을 순차적으로 진행
    • 완벽한 읽기 일관성 모드를 제공
Isolation Level Dirty Read Nonrepeatable Read Phantom Read Serialization Anomaly
Read uncommitted Possible Possible Possible Possible
Read committed Not possible Possible Possible Possible
Repeatable read Not possible Not possible Possible Possible
Serializable Not possible Not possible Not possible Not possible

선택도

  • 테이블의 특정 열을 기준으로 해당 열의 조건절에 따라 선택되는 데이터 비율

카디널리티

  • 카디널리티 = 전체 데이터 건 수 * 선택도
  • 중복도가 높으면 카디널리티가 낮고 중복도가 낮으면 카디털리티가 높음
  • 주민번호 > 높음, 이름 > 중간, 성별 > 낮음