[1. 개요]
innodb_autoinc_lock_mode 와 auto_increment 동작 방식에 대해 정리한다.
auto_increment
- INT 형 자료형을 대상으로 설정 가능하다.
- NULL 이 올 수 없으므로, NOT NULL 인 column 을 대상으로 설정 가능하다.
- Table 생성 시, auto_increment 의 시작 값을 특정 값으로 초기화 할 수 있다.
- 반드시 pk 나 unique key 가 될 필요는 없지만, 중복이 있어선 안된다.
innodb_autoinc_lock_mode
- 아래 query 로 현재 설정 된 값을 확인 할 수 있다.
# show variables like 'innodb_autoinc_lock_mode' - 아래 query 로 설정 값을 바꿀 수 있다.
# set global innodb_autoinc_lock_mode = '여기에 값';
# 0, 1, 2 이렇게 3가지 값으로 설정 할 수 있다. - 위 query 가 Variable 'innodb_autoinc_lock_mode' is a read only variable 로 실패할 경우
# vim /usr/local/etc/mysql/mysql.conf.d/mysql.cnf ## mysql.cnf 파일 위치는 다를 수 있다.(?)
# innodb_autoinc_lock_mode = 0 을 작성.
# mysql server 재실행
존재 의미
- auto_increment 설정 된 column 을 갖는 table 에 row 를 추가하는 sql 성능에 대해서 lock 메커니즘을 설정 할 수 있게 하여, 성능 향상 등을 노려 볼 수 있다.
[2. 용어 설명]
- INSERT-like statements
# table 에 record 를 삽입할 수 있는 모든 쿼리를 의미한다.
# ex) insert into, insert ignore, replace into, ... - Simple inserts
# nested subquery 등이 없는 insert 나 replace 구문
# 몇개의 행이 삽입 될 지 미리 알 수 있다. - Bulk inserts
# insert ... select 와 같은 query 처럼, 다량의 insert 를 수행하는 경우
# select 시 조건에 따라 몇개의 행이 삽입 될지 미리 알 수 없다. - Mixed-mode inserts
# auto_increment 된 column 에 할당 값을 미리 설정 한 simple inserts 를 의미함.
#
[3. innodb_autoinc_lock_mode 값에 따른 동작 방식]
0 일 때,
- traditional lock mode
- mysql 5.1.22 전 버전까지 동작 방식
- 모든 insert-like 절에 대해서 auto-increment lock 이 table 레벨로 동작
- lock 은 transaction 의 끝날 때 까지가 아닌, statement 가 끝날 때 까지 유지함.
- 즉, insert 가 동시에 실행 될 경우, 한번에 하나의 insert 만 auto-inc lock 을 소유 할 수 있기 때문에, insert 가 순차적으로 실행 된다고 볼 수 있다.
1 일 때,
- consecutive lock mode
- mysql 5.1.22 버전 이후 부터 default 값으로 설정되어 있음.
- bulk inserts 인 경우에 대해서만, table level 의 lock 을 얻는다.
- Simple inserts 에 대해서는 table level 의 lock 을 걸지 않는다.
- auto_increment 인 column 에 대해서 value 를 할당하는 과정에서만 lock 을 건다.
2 일 때,
- interleaved lock mode
[4. 각 모드 별 동작 예시]
[5 .ref]
'MySQL' 카테고리의 다른 글
MySQL. 테이블 용량 관리 (0) | 2023.09.26 |
---|---|
MySQL. unique key (0) | 2023.06.22 |
MySQL, SQL_SAFE_UPDATES (0) | 2023.06.15 |
MySQL. LAST_INSERT_ID (0) | 2023.06.15 |
mysql 공간 쿼리 (0) | 2023.05.24 |