데이터베이스 기초

트랜잭션 T1이 어떤 행에 공유 락을 걸고 읽고 있다. 이 행에 대해 T2가 공유 락을, T3가 배타 락을 요구했다. T1이 락을 해제할 때까지의 동안에 대해 올바른 것은?

  1. AT2는 바로 락을 얻을 수 있지만 T3는 기다리게 된다
  2. BT2도 T3도 기다리게 된다
  3. CT2도 T3도 바로 락을 얻을 수 있다
정답과 해설 보기

정답: A. T2는 바로 락을 얻을 수 있지만 T3는 기다리게 된다

공유 락은 데이터를 읽을 때 거는 락으로, 다른 트랜잭션도 같은 데이터에 공유 락을 걸어 동시에 읽을 수 있지만, 쓰기를 위한 배타 락은 걸 수 없습니다. 배타 락은 데이터를 갱신할 때 거는 락으로, 걸려 있는 동안 다른 트랜잭션은 공유 락도 배타 락도 걸 수 없습니다. 이 예에서는 T1의 공유 락과 T2의 공유 락이 양립하므로 T2는 바로 락을 얻어 읽을 수 있습니다. T3의 배타 락은 T1의 공유 락과 양립하지 않으므로 T1이 락을 해제할 때까지 기다리게 됩니다(T2도 공유 락을 가지고 있다면 T2의 해제도 기다립니다). 이처럼 락을 사용하여 동시에 실행되는 트랜잭션끼리의 간섭을 막는 것을 동시성 제어(배타 제어)라고 합니다.

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

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

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