MySQL - Locks & Deadlocks

임쿠쿠·2021년 8월 5일
0

MySQL

목록 보기
2/7
post-thumbnail

1. Table Level Locks

Lock이란?
아마존과 같은 다수의 사용자가 접속할때, concurrency를 관리하기 위해서 lock 사용

예시) E-commerce 웹사이트
첫번째 세션 - 물품 재고를 채우는 E-commerce 판매자
두번째 & 세번째 세션 - 물품을 사는 E-commerce 구매자

테이블

Wirte Lock ~ 테이블 전체에 대한 Lock

첫번째 세션에서 table write lock 실행 시, 두번째/세번째 구매자들의 쿼리는 lock이 해제될때까지 대기

2. Row Level Locks

트랜잭션 행에 대한 Lock

Transaction isolation level 이 READ-COMMITTED일 경우

좌측 판매자가 quantity 수량을 늘리고 commit이 완료되지 않으면, 같은 행에 대한 우측 구매자의 물품 구매 트랜잭션은 일정시간 초과 후 lock wait timeout 걸린다.

자세한 lock 정보는 아래 쿼리로 찾을 수 있다.

select * from performance_schema.data_locks;

3. Database Deadlocks

InnoDB 데드락
교착 상태는 각 트랜잭션마다 다른 락이 있기 때문에 다른 트랜잭션을 진행할 수 없는 상황이다.

실행순서

(1) 첫번째 세션에서 id=1 quantity 업데이트 트랜잭션
(2) 두번째 세션에서 id=2 price 업데이트 트랜잭션
(3) 두번째 세션에서 id=1 price 업데이트 트랜잭션
(4) 첫번째 세션에서 id=2 quantity 업데이트 트랜잭션 ~ Deadlock


첫번째 세션의 트랜잭션은 rollback, 두번째 세션의 트랜잭션은 commit

profile
Pay it forward

0개의 댓글