[DB] 데이터베이스 Lock 이란?

개발하는자·2022년 5월 23일
0

DB

목록 보기
3/3
post-thumbnail

Database Lock
1. InnoDB
2. 락 종류
3. 교착 상태


데이터베이스에서 한 프로세스가 데이터베이스 자원(데이터)를 잠그면 다른 다른 프로세스는 잠긴 데이터를 변경할 수 없습니다. 이러한 기능을 Database Lock 이라고 합니다.

이로 인해 데이터베이스 안의 데이터들의 무결성을 유지할 수 있습니다.

예를들어 정원이 40명인 공연이 있습니다. 현재 39명이 예약을 했고 단 1자리만이 남아있는 상황입니다. 이때 A와 B가 동시에 구매하기위해 DB에 접근을 했을때 락이 걸려있지 않다면 둘다 예약에 성공해 41명이 예약되는 상황이 발생할 수 있습니다.

해당 글은 Mysql 기준으로 설명할 예정입니다.



1. InnoDB

InnoDB란 데이터베이스 관리 시스템을 위한 스토리지 엔진( storage engine )입니다. InnoDB에는 acid를 준수하면서 동시성을 높이기 위해 락 종류를 여러가지 만들어 놓았습니다.

InnoDB는 Mysql, MariaDB 와 같은 DBMS가 있습니다.





2. 락 종류


2.1 database Level Locking

이 방법은 전체 데이터베이스를 잠급니다. 오직 한명만 접근 할 수 있는 방식입니다. 이 방법은 전체 데이터베이스를 잠그므로 널리 사용되지 않습니다. 소프트웨어의 새 버전으로 업그레이드하는 등 일부 지원 업데이트가 실행될 때 도움이 될 수 있습니다.



2.2 File Level Locking

여기서는 전체 데이터베이스 파일을 잠급니다. 테이블의 일부 또는 다른 테이블의 일부까지도 포함될 수 있습니다.



2.3 Page or Block Level Locking

이 방법에서는 데이터베이스 파일의 페이지 또는 블록이 업데이트를 위해 잠깁니다.



2.4 Column Level Locking

이 방법은 행의 일부 열이 업데이트를 위해 잠깁니다. 자주 사용되지 않는 방법입니다.



⭐ 2.5 row Level Locking

단일 테이블에서 여러 동시 쓰기 작업을 수행할 때 교착상태를 방지하기 위해 수정될 것으로 예상되는 을 잠글 수 있습니다.

Shared Lock (공유 락) (S Lock)

공유 락은 읽기 락이라고도 불리며 오직 데이터를 읽는데 사용됩니다. 공유 락은 무결성 읽기를 제공합니다. 읽기 전용 요청 중에 레코드가 업데이트되고 있지 않은지 확인합니다.

예를들어 A=100이고 A를 읽고 있는 트랜잭션이 2개 있습니다. 트랜잭션 중 하나가 A를 업데이트 하면 나머지 한명은 잘못된 업데이트를 할 수 있습니다. 이걸 방지하기 위해 Shared Lock은 읽기를 마칠때 까지 업데이트 되지 않도록 합니다.

Exclusive Lock (배타 락) (X Lock)

배타적 잠금을 사용하면 데이터를 읽고 쓸 수 있습니다. 쓰기잠금 이라고도 합니다.

예를 들어 A=100이고 한 트랜젝션이 50을 빼려고합니다. 배타 락은 이를 허용하고 다른 트랜잭션이 읽기 또는 쓰기를 원할때 이를 방지합니다.



2.6 table Level Locking

테이블 레벨 또한 여러 동시 쓰기 작업 중 문제를 방지하기 위해 해당 테이블 전부를 잠그는 방식입니다.




3. 교착 상태 (Dead Lock)




참고 링크

https://www.geeksforgeeks.org/difference-between-shared-lock-and-exclusive-lock/

https://www.tutorialcup.com/interview/sql-interview-questions/db-locks.htm#:~:text=What%20is%20a%20database%20lock,to%20update%2Fdelete%20the%20data.

아이콘 출처 - FlatIcon

profile
To the moon.

0개의 댓글