이번 장에서는 MySQL의 동시성에 영향을 미치는 잠금(Lock), 트랜잭션, 트랜잭션 격리 수준을 살펴보자.
잠금은 동시성을 제어하기 위한 기능이며, 트랜잭션은 데이터 정합성을 보장하기 위한 기능이다. 또한 격리 수준이라는 것은 하나의 트랜잭션 내에서 또는 여러 트랜잭션 간의 작업 내용을 어떻게 공유하고 차단할 것인지를 결정하는 레벨을 의미한다.
MyISAM은 트랜잭션을 지원하지 않고, InnoDB는 트랜잭션을 지원하는데 트랜잭션을 지원한다는 것은 많은 이점을 준다는 사실을 기억하자.
트랜잭션은 꼭 여러 개의 변경 작업을 수행하는 쿼리가 조합됐을 때만 의미있는 개념이 아니다. 하나의 논리적인 작업 셋에 하나의 쿼리가 있든 여러 개의 쿼리가 있든 관계없이 All Or None 으로 동작하여 정합성을 보장해주는 것이다.
프로그램 코드가 DB 커넥션을 가지고 있는 범위와 트랜잭션이 활성화 되어있는 프로그램의 범위는 최소화하는 것이 좋다. 네트워크 작업이나 파일 I/O 등이 있는 경우에는 반드시 트랜잭션에서 배제해야한다. 일반적으로 DB 커넥션 수는 제한적이며, 트랜잭션이 길어지면 커넥션 보유 기간이 길어지고 이 때문에 커넥션 여유 커넥션 개수가 줄어들게 된다.
MySQL에서는 MySQL 엔진 잠금과 스토리지 엔진 잠금이 있다. MySQL 잠금은 모든 스토리지 엔진에 영향을 미치지만, 스토리지 엔진 잠금은 상호 영향을 미치지 않는다.