MySQL InnoDB 엔진의 lock에 대해서.. InnoDB는 일반적인 row(이하 '로우') 레벨의 lock(이하 '락')을 지원하고 여기에는 두 종류의 락이 있다. 이 락을 가진 트랜잭션은 로우를 읽을 수 있다. 이 락을 가진 트랜잭션은 로우를 갱신하거
ACID에서 I(Isolation)은 사실 100% 보장 되는 것이 아니라 그 level에 따라 정도가 달라진다. InnoDB는 SQL:1992 표준에 명시된 4가지의 Transaction Isolation Levels를 지원한다. (1) READ UNCOMMITED
START TRANSACTION or BEGIN : 트랜잭션 시작 COMMIT : 현재 트랜잭션 커밋(=변경사항 영구 적용) ROLLBACK : 현재 트랜잭션 롤백(=변경사항 초기화) *autocommit : 1로 설정되어 있으면 별도로 START TRANSACT
자, Transaction Isolation Level을 하나씩 실습을 통해 이해해보자. 일단 다음과 같은 간단한 테이블(이름 : sample)이 있다고 해보자.여기서 두 개의 터미널을 열고 각각 하나씩 트랜잭션을 수행할 것이다. 트랜잭션은 각각 T1(하얀색 터미널),
이번엔 READ COMMITED 레벨을 보겠다. 이전 실습과 마찬가지로 아래와 같은 상태에서 출발한다. 이전 실습 때처럼 T2에서 100을 200으로 수정하고T1에서 확인해보면이번엔 100이 초기 상태와 동일하게 그대로 100으로 보이는 것을 알 수 있다. T2의 작업
이번엔 MySQL InnoDB 엔진의 기본 Transaction Isolation 레벨인 REPEATABLE READ에 대해 살펴보자. 이전 실습 때와 같은 출발점에서 시작하자. 일단 T2에서 (1) id 1번 row의 count 컬럼 값을 100에서 200으로 수정하
이번에는 가장 강력한 고립화 레벨인 Serializable 레벨을 보겠다. 마찬가지로 동일한 출발점에서 시작한다.잠깐 count 값을 100에서 200으로 수정해보자.어? 그런데 Hang이 걸린다. 멈췄다는 뜻.. 왜 그런 걸까? 그건 바로 T1에서 실행한 때문이다.
my.cnf에 InnoDB에서 잠금 획득을 위해 최대 대기할 수 있는 시간(초 단위)를 설정할 수 있다. 이 옵션에 설정된 시간 동안 잠금을 기다리게 되면 InnoDB 스토리지 엔진이 'Lock wait timeout exceed' 오류를 발생시키고 쿼리는 실패 처리가