동시성 제어
DBMS 가 다수의 사용자 사이에서 동시에 작용하는 다중 트랜잭션의 상호간섭 작용에서 Database 를 보호하는 것 을 의미. 데이터를 엉망으로 만들지 않도록 하기위해.
다수의 DB 접근을 필요로 하는 요청이 들어올 때 트랜잭션 단위로 DB 접근을 하게 되는데 DB 접근을 동시적으로 모두 허용해주면 데이터베이스의 일관성과 무결성이 깨지게됩니다
락(lock)
동시성 제어를 하기 위해서. 데이터 무결성, 일관성을 지키기 위해.
트랜잭션이 데이터에 잠금(Lock) 을 설정하면 다른 트랜잭션은 해당 데이터에 대해 잠금이 해제(UnLock)될 때까지 접근/수정/삭제 불가.
마치 시스템은 시스템은 잠금을 사용하여 데이터에 액세스하는 방법을 관리하고 한 사용자가 변경할 때 다른 사용자가 충돌하는 변경을 수행하지 않도록 합니다.
낙관적 락(Optimisstic Lock)
데이터 갱신시 경합이 발생하지 않을거라고 본다.
처음에 읽어온 버전과 그 다음에 읽어온 버전이 같다면, 버전을 업데이트.
늦게 구매한 사람은 처음에 읽었던 버전과 나중에 읽은 버전이 달라서 충돌 발생.
동시 업데이트가 거의 없는 경우에 사용
비관적 락(Pessimistic Lock)
공유 잠금한 트랜잭션이 데이터 항목에 대하여 읽기(Read) 만 가능. Write 는 불가.
바꾸지 않기 때문에 데이터에 대한 사용권을 여러 트랜잭션이 함께 가질 수 있음.
전용 잠금한 트랜잭션은 데이터 항목에 대하여 읽기(Read) 와 기록(Write) 모두 가능. 데이터에 대한 독점권을 가짐
다른 트랜잭션은 읽기(Read) 와 기록(Write) 모두 할 수 없음
사용자가 데이터를 업데이트하거나 변경해야 할 때 사용
한 번에 한 명의 사용자만 변경할 수 있으므로 충돌이 방지됩니다.
Deadlock
데이터베이스에서 둘 이상의 트랜잭션이 서로가 잠금을 포기하기를 기다리는 상황.
두 개 이상의 프로세스가 리소스를 보유하고 다른 프로세스가 다른 리소스를 해제할 때까지 기다릴 때 시스템에서 교착 상태가 발생하여 어떤 프로세스도 진행할 수 없는 종속성 악순환.
즉, 교착 상태 란 두 트랜잭션이 각각 Lock 을 설정하고 서로의 Lock 에 접근하여 값을 얻어오려 할 때 이미 각 트랜잭션에 의해 Lock 이 설정되어 있기 때문에 트랜잭션이 영원히 처리가 되지않게 되는 상태를
데드락 해결법
교착상태에 필요한 조건 중 적어도 하나를 무효화함.
여기에는 교착 상태가 발생하지 않도록 시스템을 설계하는 것이 포함됩니다.
이는 교착 상태에 필요한 조건(상호 배제, 보류 및 대기, 선점 없음, 순환 대기) 중 하나 이상이 발생하지 않도록 보장하는 것을 의미
이 전략에서는 시스템이 잠재적인 교착 상태가 발생하기 전에 이를 인식하고 그에 따라 결정을 내려야 합니다.
여기에는 시스템이 교착 상태를 피할 수 있는 안전한 상태로 유지될 수 있는 경우에만 리소스를 할당하도록 보장하는 은행 알고리즘과 같은 알고리즘을 사용하여 리소스 할당을 위한 고급 계획이 포함될 수 있습니다.
때로는 교착 상태를 방지하거나 방지하는 것이 불가능하거나 실용적이지 않으므로 , 시스템은 교착 상태가 발생한 시기를 감지하고 이를 해결하기 위한 조치를 취할 수 있어야 합니다.
여기에는 교착 상태의 프로세스를 식별한 다음 프로세스에서 리소스를 강제로 빼내거나(선점) 교착 상태와 관련된 하나 이상의 프로세스를 종료하여 교착 상태를 "해제"하는 작업이 포함될 수 있습니다.
더 공부해야할것
MySQL의 격리 수준
더티 리드(강아지 이름 변경 기사),non repeatable 리드(상희의 일주일 기분), 팬텀 리드(상희의 40만원 휴대폰 사기. 유령같은 40만원)
이노 DB의 인덱싱 락.