woowacourse-study / 2022-Real-MySQL

⚡️토르⚡️의 짜릿한 Real MySQL 뽀개기 🔨
9 stars 3 forks source link

자동 증가 락 #7

Open hyeonic opened 2 years ago

hyeonic commented 2 years ago

주제

MySQL에서는 자동 증가하는 숫자 값을 추출하기 위해 AUTO_INCREMENT라는 컬럼 속성을 제공하고 있다. AUTO_INCREMENT 컬럼이 사용된 테이블에 동시에 여러 레코드가 INSERT되는 경우 어떠한 방식으로 잠금이 진행되는지 알아본다.

선정 이유

우리는 PK에 자동으로 id을 증가 시키기 위해 AUTO_INCREMENT 설정을 자주 사용하곤 한다. 이때 내부적으로 어떠한 방식으로 잠금이 일어나는지 알아보기 위해 선정했다.

해당 텍스트

MySQL에서는 자동 증가하는 숫자 값을 추출하기 위해 AUTO_INCREMENT라는 컬럼 속성을 제공하고 있다. AUTO_INCREMENT 컬럼이 사용된 테이블에 동시에 여러 레코드가 INSERT되는 경우 InnoDB 스토리지 엔진은 내부적으로 auto increment lock이라는 테이블 수준의 잠금을 사용하고 있다.

auto increment lock은 명시적으로 획득할 수 없다. 오직 레코드가 INSERT되는 시점에 아주 잠깐이 시간 동안 걸렸다가 해제 되기 때문에 대부분의 경우 문제를 일으키지 않았다.

지금까지의 설명은 MySQL 5.0 이하 버전에서 사용되던 방식이다.

MySQL 5.1 이상

MySQL 5.1 이상 부터는 innodb_autonic_lock_mode라는 시스템 변수를 통해 auto increment lock의 작동 방식을 변경할 수 있다.

래치 (latch) InnoDB의 내부 메모리 구조에 대한 락을 구현하기 위해 사용되는 경량의 구조로 일반적으로 밀리초, 마이크로초 단위의 짧은 시간 동안 유지된다.

MySQL 8.0 버전 부터는 innodb_autonic_lock_mode의 기본값이 2로 변경되었다.

관련 페이지

169 ~ 170p