본문 바로가기

MySQL

MySQL, innodb_autoinc_lock_mode

[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. 용어 설명]

  1. INSERT-like statements
    # table 에 record 를 삽입할 수 있는 모든 쿼리를 의미한다.
    # ex) insert into, insert ignore, replace into, ...

  2. Simple inserts
    # nested subquery 등이 없는 insert 나 replace 구문
    # 몇개의 행이 삽입 될 지 미리 알 수 있다.

  3. Bulk inserts
    # insert ... select 와 같은 query 처럼, 다량의 insert 를 수행하는 경우
    # select 시 조건에 따라 몇개의 행이 삽입 될지 미리 알 수 없다.

  4. 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