LabHub

동시성 — 두 사람이 같은 행을 건드릴 때 · 잠금과 데드락 · 퀴즈

동시성 확인

LabHub 에서 이어서 보기

문항 8개. 정답과 해설은 풀어 본 뒤에 보여 드립니다.

  1. 재고가 음수가 되는 '잃어버린 갱신' 의 원인은?

    1. UPDATE 문의 SQL 문법이 틀려서
    2. 재고 컬럼에 인덱스가 없어서
    3. 읽고 판단하고 쓰는 사이에 남이 끼어들 수 있어서
    4. 트랜잭션을 커밋하지 않아서
  2. 가능하다면 가장 싼 해법은?

    1. select ... for update
    2. 한 문장으로 끝내기(update ... where qty > 0)
    3. 테이블 잠금
    4. 직렬화 격리 수준
  3. 데드락을 대부분 없애는 규칙은?

    1. 잠그는 순서를 모두가 같게 한다
    2. 트랜잭션을 길게 잡는다
    3. 격리 수준을 낮춘다
    4. 인덱스를 추가한다
  4. `lock_timeout` 을 안 걸면 결국 어디가 먼저 멈추나?

    1. 데이터베이스가 먼저 멈춘다
    2. 디스크가 먼저 가득 찬다
    3. 네트워크 대역이 먼저 막힌다
    4. 커넥션 풀이 차서 애플리케이션이 멈춘다
  5. `for update skip locked` 가 바꾸는 것은?

    1. 잠금을 안 건다
    2. 잠긴 행을 기다리지 않고 건너뛴다
    3. 커밋을 자동으로 한다
    4. 격리 수준을 올린다
  6. 트랜잭션 안에서 외부 API 를 부르면 안 되는 이유는?

    1. 트랜잭션 안에서는 문법상 안 된다
    2. 외부 호출이 있으면 커밋이 안 된다
    3. 잡은 잠금이 그 시간만큼 유지된다
    4. 응답이 느려지기 때문에
  7. 어드바이저리 잠금에서 주의할 점은?

    1. 일반 잠금보다 느리다
    2. 반드시 트랜잭션 안에서만 쓸 수 있다
    3. 대상 테이블에 인덱스가 있어야 한다
    4. 키 공간이 전역이고 세션에 묶여 커넥션 반납 전에 풀어야 한다
  8. 차단 관계를 한 줄로 보는 방법은?

    1. pg_stat_activity 에서 pg_blocking_pids(pid) 를 본다
    2. pg_locks 를 자기 자신과 직접 조인해서 본다
    3. 잠금 대기 로그를 켜고 기다린다
    4. 막힌 질의에 EXPLAIN 을 걸어 본다