Database Lock
1. InnoDB
2. 락 종류
3. 교착 상태
데이터베이스에서 한 프로세스가 데이터베이스 자원(데이터)를 잠그면 다른 다른 프로세스는 잠긴 데이터를 변경할 수 없습니다. 이러한 기능을 Database Lock 이라고 합니다.
이로 인해 데이터베이스 안의 데이터들의 무결성을 유지할 수 있습니다.
예를들어 정원이 40명인 공연이 있습니다. 현재 39명이 예약을 했고 단 1자리만이 남아있는 상황입니다. 이때 A와 B가 동시에 구매하기위해 DB에 접근을 했을때 락이 걸려있지 않다면 둘다 예약에 성공해 41명이 예약되는 상황이 발생할 수 있습니다.
InnoDB란 데이터베이스 관리 시스템을 위한 스토리지 엔진( storage engine )입니다. InnoDB에는 acid를 준수하면서 동시성을 높이기 위해 락 종류를 여러가지 만들어 놓았습니다.
InnoDB는 Mysql, MariaDB 와 같은 DBMS가 있습니다.
이 방법은 전체 데이터베이스를 잠급니다. 오직 한명만 접근 할 수 있는 방식입니다. 이 방법은 전체 데이터베이스를 잠그므로 널리 사용되지 않습니다. 소프트웨어의 새 버전으로 업그레이드하는 등 일부 지원 업데이트가 실행될 때 도움이 될 수 있습니다.
여기서는 전체 데이터베이스 파일을 잠급니다. 테이블의 일부 또는 다른 테이블의 일부까지도 포함될 수 있습니다.
이 방법에서는 데이터베이스 파일의 페이지 또는 블록이 업데이트를 위해 잠깁니다.
이 방법은 행의 일부 열이 업데이트를 위해 잠깁니다. 자주 사용되지 않는 방법입니다.
단일 테이블에서 여러 동시 쓰기 작업을 수행할 때 교착상태를 방지하기 위해 수정될 것으로 예상되는 행을 잠글 수 있습니다.
공유 락은 읽기 락이라고도 불리며 오직 데이터를 읽는데 사용됩니다. 공유 락은 무결성 읽기를 제공합니다. 읽기 전용 요청 중에 레코드가 업데이트되고 있지 않은지 확인합니다.
예를들어 A=100이고 A를 읽고 있는 트랜잭션이 2개 있습니다. 트랜잭션 중 하나가 A를 업데이트 하면 나머지 한명은 잘못된 업데이트를 할 수 있습니다. 이걸 방지하기 위해 Shared Lock은 읽기를 마칠때 까지 업데이트 되지 않도록 합니다.
배타적 잠금을 사용하면 데이터를 읽고 쓸 수 있습니다. 쓰기잠금 이라고도 합니다.
예를 들어 A=100이고 한 트랜젝션이 50을 빼려고합니다. 배타 락은 이를 허용하고 다른 트랜잭션이 읽기 또는 쓰기를 원할때 이를 방지합니다.
테이블 레벨 또한 여러 동시 쓰기 작업 중 문제를 방지하기 위해 해당 테이블 전부를 잠그는 방식입니다.
https://www.geeksforgeeks.org/difference-between-shared-lock-and-exclusive-lock/
아이콘 출처 - FlatIcon