잠금

데이터베이스에서 데이터를 읽거나 쓸 때 발생할 수 있는 잠재적인 문제들을 방지하기 위해 데이터 접근을 잠시동안 막아두는 것을 의미한다. 잠재적인 문제들은 같은 데이터를 동시에 접근할 때 발생한다. 먼저, 발생 가능한 문제들에 대해서 알아보자.

잠재적 문제

  1. Race Condition
  2. Dirty Reads
  3. Non-Repeatable Reads
  4. Phantom Reads

잠금의 종류

잠금의 종류는 아래 기술된 잠금 외에도 여러 종류가 있다. 다만, 접해볼 일이 많이 없고 쓰인다 하더라도 DB 백업과 같은 특정 작업에만 사용되므로 일단은 넘어가도록 하자.

  1. Table Lock(테이블 락)
  2. Record Lock(레코드 락)
  3. Gap Lock(갭 락)
  4. Next Key Lock(넥스트 키 락)
  5. Auto Increment Lock(자동 증가 락)

인덱스 그리고 잠금

InnoDB에서 인덱스와 잠금은 상당히 중요한 관계를 가진다. 레코드 락의 설명을 보면 인덱스의 레코드를 잠근다고 되어있다. 이 문장의 의미는 변경해야 할 레코드를 검색할 때 검색한 인덱스의 레코드를 모두 락을 걸게 된다.

격리 수준

트랜잭션에 동시에 처리될 떄 다른 트랜잭션에서 처리되는 데이터를 볼 수 있는지에 대한 허용 수준을 말한다.

DIRTY READ NON-REPEATED READ PHANTOM READ
READ UNCOMMITTED 발생 발생 발생
READ COMMITTED 없음 발생 발생
REPEATABLE READ 없음 없음 발생(INNODB 없음)
SERIALIZABLE 없음 없음 없음