동시성을 위해 데이터에 접근하는 커넥션을 제어하는 것으로 Lock을 통해 일부 커넥션 혹은 전체 커넥션의 접근을 막는 것을 말합니다.
락이 가지는 권한 수준을 말합니다.
공유 락이라고도 불리며 보통 읽기 명령에서 사용되는 락입니다.
공유 락끼리 동시에 접근이 가능하지만 베타 락은 접근이 불가능합니다.
여러 커넥션에서 동시에 읽기 명령을 진행하더라도 이상 현상이 발생하지 않아 공유 락으로 처리됩니다.
베타 락으로도 불리며 쓰기 명령에서 사용되는 락입니다.
다른 공유 락과 베타 락의 접근을 막습니다.
여러 커넥션에서 쓰기 명령이 동시에 진행되는 경우 이전 변경 기록이 없어지는 갱신 분실과 같은 쓰기 이상 현상이 발생하기 때문입니다.
업데이트 락은 수정을 위해 베타 락을 걸기 전에 Conversion Deadlock을 방지하기 위해 사용되는 락입니다.
읽기 → 쓰기로 진행되는 커넥션이 2개가 존재할때 읽기는 공유락으로 진행되지만 쓰기는 베타 락으로 진행되어 자신의 공유락은 포기하지 않고 베타락을 얻기위한 대기로 데드락이 발생할 수 있습니다.
내제 락으로도 불리며 사용자가 범위를 지정하여 락을 걸 수 있는지 파악하기 위해 사용되는 락입니다.
row, page, table등 여러 계층에서 락을 걸 수 있습니다.
다른 락과 다르게 실제로 해당 범위에 락을 거는 것이 아닌 해당 범위에 락을 걸 것이라는 신호에 가깝습니다.
어떤 방식으로 락을 언제, 어떻게 사용할지 정하는 전략입니다.
낙관적 락으로 락 없이 진행한 후 커밋 시 버전 체크로 충돌을 감지하는 것입니다. 만약 충돌이 발생한다면 재시도, 롤백과 같은 방법으로 극복합니다.
변경 가능성이 낮아 동시에 접근이 자주 일어나지 않는 경우 사용합니다.
동시성이 높고 락 오버헤드가 적다는 장점이 있습니다. 하지만 충돌과 안정성이 낮습니다.
비관적 락으로 트랜잭션 시작 시 (공유, 배제)락을 걸고 명령을 실행합니다.
변경 가능성이 높아 동시에 접근이 자주 일어날 경우 사용합니다.
충돌과 안정성이 높다는 장점이 있지만 동시성이 낮고 잠금 대기가 발생합니다.