동시성 제어 (필수) 개요, 락(lock), 공유락, 배타락 (추가) Deadlock, Deadlock 해결법

강준호·2024년 2월 4일
0

기술면접

목록 보기
8/9

동시성 제어

  • DBMS 가 다수의 사용자 사이에서 동시에 작용하는 다중 트랜잭션의 상호간섭 작용에서 Database 를 보호하는 것 을 의미. 데이터를 엉망으로 만들지 않도록 하기위해.

  • 다수의 DB 접근을 필요로 하는 요청이 들어올 때 트랜잭션 단위로 DB 접근을 하게 되는데 DB 접근을 동시적으로 모두 허용해주면 데이터베이스의 일관성과 무결성이 깨지게됩니다

락(lock)

왜필요해?

  • 동시성 제어를 하기 위해서. 데이터 무결성, 일관성을 지키기 위해.

  • 트랜잭션이 데이터에 잠금(Lock) 을 설정하면 다른 트랜잭션은 해당 데이터에 대해 잠금이 해제(UnLock)될 때까지 접근/수정/삭제 불가.

  • 마치 시스템은 시스템은 잠금을 사용하여 데이터에 액세스하는 방법을 관리하고 한 사용자가 변경할 때 다른 사용자가 충돌하는 변경을 수행하지 않도록 합니다.

낙관적 락(Optimisstic Lock)

  • 데이터 갱신시 경합이 발생하지 않을거라고 본다.

  • 처음에 읽어온 버전과 그 다음에 읽어온 버전이 같다면, 버전을 업데이트.

  • 늦게 구매한 사람은 처음에 읽었던 버전과 나중에 읽은 버전이 달라서 충돌 발생.

언제 사용?

동시 업데이트가 거의 없는 경우에 사용


비관적 락(Pessimistic Lock)

  • 동일한 데이터를 동시에 수정할 가능성이 높다고 본다.
  • 그래서 먼저 변경을 시도한 사용자가 변경을 확약하기까지 대기함. 그 후에 UnLock

언제 사용?

  • 동시 업데이트가 빈번한 경우, 롤백하기 힘든 외부 시스템과 연동될때

공유락(Shared Lock)

비유

  • 일기를 읽을 수는 있지만 쓸 수는 없는것

설명

  • 공유 잠금한 트랜잭션이 데이터 항목에 대하여 읽기(Read) 만 가능. Write 는 불가.

  • 바꾸지 않기 때문에 데이터에 대한 사용권을 여러 트랜잭션이 함께 가질 수 있음.

배타락(Exclusive Lock)

비유

  • 일기를 쓰고 있으니 내가 다 할 때까지 너는 일기장을 읽거나 쓸 수 없어!

설명

  • 한번에 여러개를 걸 수 있음.
  • 전용 잠금한 트랜잭션은 데이터 항목에 대하여 읽기(Read) 와 기록(Write) 모두 가능. 데이터에 대한 독점권을 가짐

  • 다른 트랜잭션은 읽기(Read) 와 기록(Write) 모두 할 수 없음

  • 사용자가 데이터를 업데이트하거나 변경해야 할 때 사용

  • 한 번에 한 명의 사용자만 변경할 수 있으므로 충돌이 방지됩니다.


Deadlock

데드락

비유

  • 두 명의 카우보이가 서로에게 총을 겨누고 둘 다 총에 맞을 위험 없이 움직일 수 없는 영화 속의 대립느낌!

설명

  • 데이터베이스에서 둘 이상의 트랜잭션이 서로가 잠금을 포기하기를 기다리는 상황.

  • 두 개 이상의 프로세스가 리소스를 보유하고 다른 프로세스가 다른 리소스를 해제할 때까지 기다릴 때 시스템에서 교착 상태가 발생하여 어떤 프로세스도 진행할 수 없는 종속성 악순환.

  • 즉, 교착 상태 란 두 트랜잭션이 각각 Lock 을 설정하고 서로의 Lock 에 접근하여 값을 얻어오려 할 때 이미 각 트랜잭션에 의해 Lock 이 설정되어 있기 때문에 트랜잭션이 영원히 처리가 되지않게 되는 상태를

데드락 해결법

예방

  • 교착상태에 필요한 조건 중 적어도 하나를 무효화함.

  • 여기에는 교착 상태가 발생하지 않도록 시스템을 설계하는 것이 포함됩니다.

  • 이는 교착 상태에 필요한 조건(상호 배제, 보류 및 대기, 선점 없음, 순환 대기) 중 하나 이상이 발생하지 않도록 보장하는 것을 의미

예시

  • 모든 프로세스가 필요한 모든 리소스를 한 번에 요청하도록 하여 다른 프로세스를 기다리는 동안 일부 리소스를 보유할 가능성을 줄일 수 있습니다.

회피

  • 이 전략에서는 시스템이 잠재적인 교착 상태가 발생하기 전에 이를 인식하고 그에 따라 결정을 내려야 합니다.

  • 여기에는 시스템이 교착 상태를 피할 수 있는 안전한 상태로 유지될 수 있는 경우에만 리소스를 할당하도록 보장하는 은행 알고리즘과 같은 알고리즘을 사용하여 리소스 할당을 위한 고급 계획이 포함될 수 있습니다.

탐지 및 복구

  • 때로는 교착 상태를 방지하거나 방지하는 것이 불가능하거나 실용적이지 않으므로 , 시스템은 교착 상태가 발생한 시기를 감지하고 이를 해결하기 위한 조치를 취할 수 있어야 합니다.

  • 여기에는 교착 상태의 프로세스를 식별한 다음 프로세스에서 리소스를 강제로 빼내거나(선점) 교착 상태와 관련된 하나 이상의 프로세스를 종료하여 교착 상태를 "해제"하는 작업이 포함될 수 있습니다.

교착 상태 무시

  • 일부 환경, 특히 교착 상태가 드물거나 결과가 미미한 환경에서는 이를 무시하는 것이 더 비용 효율적일 수 있습니다.

더 공부해야할것

  • MySQL의 격리 수준

  • 더티 리드(강아지 이름 변경 기사),non repeatable 리드(상희의 일주일 기분), 팬텀 리드(상희의 40만원 휴대폰 사기. 유령같은 40만원)

Read Committed

repeatable read

이노 DB의 인덱싱 락.

0개의 댓글