← 질문 목록
#330깊이 0

읽기만 하는데도 잠금이 걸리는 경우가 있는가?

데이터베이스심화동시성트랜잭션

있다. 어떤 격리 수준을 골랐느냐에 따라 읽기도 남을 기다리게 만든다.

  • SERIALIZABLE읽은 범위까지 잠근다. 남이 그 사이에 못 끼운다
  • REPEATABLE READ같은 것을 다시 읽어도 같은 값이 나온다
  • READ COMMITTED커밋된 것만 읽는다. 읽을 때마다 달라질 수 있다
  • READ UNCOMMITTED아직 커밋 안 된 것도 읽는다

위로 갈수록 남을 더 많이 막는다. 대신 이상한 현상이 줄어든다.

요즘 DB는 대부분 잠그지 않고 푼다. 값을 고칠 때 옛 버전을 남겨 두고, 읽는 쪽은 자기 시점의 버전을 본다. 그래서 읽기가 쓰기를 안 막는다.

그래도 SERIALIZABLE에서는 다르다. 겹치면 잠그거나, 커밋할 때 검사해 어긋난 쪽을 되돌린다. 어느 쪽인지는 DB마다 다르다.

먼저 DB의 기본 격리 수준을 확인해야 한다. 표준이 정한 기본은 SERIALIZABLE인데 그대로 쓰는 DB는 드물다. MySQL InnoDB는 REPEATABLE READ, PostgreSQL은 READ COMMITTED다.

추천 꼬리질문

0/300

적은 내용은 AI 학습에 쓰일 수 있습니다. 이름이나 연락처는 넣지 말아 주세요.

관련 질문

읽기만 하는데도 잠금이 걸리는 경우가 있는가?