데이터베이스 기초

SQL 표준 규격이 정하는 격리 수준 중 READ COMMITTED에서 일어날 수 있는 현상의 조합으로 올바른 것은?

  1. A더티 리드, 반복 불가능한 읽기, 팬텀 리드 모두 일어나지 않는다
  2. B더티 리드는 일어나지 않지만, 반복 불가능한 읽기와 팬텀 리드는 일어날 수 있다
  3. C더티 리드와 반복 불가능한 읽기는 일어나지 않지만, 팬텀 리드는 일어날 수 있다
정답과 해설 보기

정답: B. 더티 리드는 일어나지 않지만, 반복 불가능한 읽기와 팬텀 리드는 일어날 수 있다

SQL 표준 규격은 격리 수준을 막는 현상이 적은 순서대로 READ UNCOMMITTED, READ COMMITTED, REPEATABLE READ, SERIALIZABLE의 4가지로 정하고 있습니다. READ UNCOMMITTED에서는 세 가지 현상이 모두 일어날 수 있습니다. READ COMMITTED는 커밋된 데이터만 읽으므로 더티 리드를 막지만, 읽을 때마다 그 시점의 커밋된 값을 보므로 반복 불가능한 읽기와 팬텀 리드는 일어날 수 있습니다. REPEATABLE READ는 여기에 더해 반복 불가능한 읽기를 막지만, 팬텀 리드는 일어날 수 있습니다. SERIALIZABLE은 세 가지를 모두 막으며, 트랜잭션을 어떤 순서로 하나씩 실행한 경우와 같은 결과를 보장합니다. 격리 수준을 올릴수록 락 대기나 처리의 재실행이 늘어 동시에 처리할 수 있는 양이 줄어들므로, 용도에 따라 고릅니다. 실제 DBMS에서는 기본 격리 수준이나 각 수준에서 실제로 막을 수 있는 현상이 표준 규격의 최소한의 규정보다 강한 경우가 있습니다.

이 분야 연습하기 분야로 돌아가기

데이터베이스 기초의 다른 문제

  1. 트랜잭션 T1이 어떤 행에 공유 락을 걸고 읽고 있다. 이 행에 대해 T2가 공유 락을, T3가 배타 락을 요구했다. T1이 락을 해제할 때까지의 동안에 대해 올바른 것은?
  2. 트랜잭션의 동시성 제어에 사용되는 2단계 로킹 방식에 대한 설명으로 올바른 것은?
  3. 트랜잭션 T1은 행 A에 배타 락을 건 뒤 행 B의 락을 요구하고, T2는 행 B에 배타 락을 건 뒤 행 A의 락을 요구했기 때문에 둘 다 앞으로 나아갈 수 없게 되었다. DBMS가 이 상태를 감지했을 때 하는 일반적인 대처는?
  4. 많은 DBMS는 데이터를 갱신할 때 갱신 내용을 로그(저널)에 기록하고, 그 로그를 데이터베이스 본체보다 먼저 비휘발성 저장 장치에 쓴다(WAL: 로그 선행 기록). 이 방식을 취하는 주된 이유는?
  5. 트랜잭션 T1~T5가 있고, 장애가 발생하기 전에 체크포인트를 한 번 잡았다. T1은 체크포인트 전에 시작하여 커밋했다. T2와 T3는 체크포인트 전에 시작했으며, T2는 체크포인트 후 장애 전에 커밋했고, T3는 장애 시점에 커밋하지 않았다. T4와 T5는 체크포인트 후에 시작했으며, T4는 장애 전에 커밋했고, T5는 커밋하지 않았다. 장애 후의 복구에서 로그를 사용하여 롤포워드해야 하는 트랜잭션은?