MySQL innodb_autoinc_lock_mode에 대한 자세한 소개

黄舟
풀어 주다: 2017-03-18 13:49:26
원래의
1152명이 탐색했습니다.

다음 편집기에서는 MySQL innodb_autoinc_lock_mode를 소개합니다. 편집자님이 꽤 좋다고 생각하셔서 지금 공유하고 모두에게 참고용으로 드리고자 합니다. 편집기를 따라 살펴보겠습니다.

innodb_autoinc_lock_mode 매개변수는 auto_increment 열이 있는 테이블에 데이터를 삽입할 때 관련 잠금의 동작을 제어합니다.

이를 설정하면 성능과 성능이 향상될 수 있습니다. 보안 균형(마스터-슬레이브 데이터 일관성) 달성

[0] 먼저 insert를 분류해 보겠습니다

우선 insert는 일반적으로 나누어집니다. 세 가지 범주로 분류:

1. t(이름) 값에 삽입('test')

데이터 로드와 같은 대량 삽입 | into..select .... from ....

3. t(id,name) 값(1,'a'),(null,'에 삽입과 같은 혼합 삽입 b') ,(5,'c');

[1] innodb_autoinc_lock_mode 설명

innodb_auto_lockmode에는 세 가지 값이 있습니다.

1, 0은 전통

2, 1은 일관성

3, 2는 인터리브

【1.1】tradition(innodb_autoinc_lock_mode=0) 모드:

1. 이전 버전과의 호환성을 제공합니다

2. ("insert like")는 명령문 시작 부분에서 테이블 수준 auto_inc 잠금을 획득하고 명령문 끝에서 잠금을 해제해야 합니다. 이는 트랜잭션 수준이 아닌 명령문 수준이므로 트랜잭션에 하나가 포함될 수 있습니다. 또는 더 많은 진술.

3. 이는 값 분배의 예측성, 연속성 및 반복성을 보장할 수 있습니다. 이는 또한 슬레이브 값에 복사될 때 삽입 문이 마스터와 동일하게 생성될 수 있음을 보장합니다. 명령문 기반 복제의 안전성).

4. 이 모드에서는 구문이 끝날 때까지 auto_inc 잠금이 유지되므로 동시 삽입에 영향을 줍니다.

[1.2] 연속(innodb_autoinc_lock_mode=1) 모드:

1. 이 모드에서는 단순 삽입이 최적화되었습니다. 한 번에 삽입되는 값의 수는 즉시 결정될 수 있으므로 MySQL은 일반적으로 이 삽입 문에 대해 한 번에 여러 개의 연속된 값을 생성할 수 있으며 이는 복제에도 안전합니다(문 기반의 안전성을 보장합니다). 복제)

2. 이 모드는 mysql의 기본 모드이기도 합니다. 이 모드의 장점은 명령문이 끝날 때까지 auto_inc 잠금이 유지되지 않는다는 것입니다. 해당 값을 미리 잠금 해제할 수 있습니다

【1.3】interleaved(innodb_autoinc_lock_mode=2) 모드

1. 이 모드에는 auto_inc 잠금이 없으므로 이 모드에서는 성능이 가장 좋지만 문제도 있습니다. 즉, 동일한 명령문에 대해 얻은 auto_incremant 값이 연속적이지 않을 수 있습니다.

【2】바이너리 파일 형식이 혼합 행인 경우 이 세 가지 값 중 하나라도 복사해도 안전합니다.

mysql은 이제 바이너리 형식을 행으로 설정할 것을 권장하므로 binlog_format가 명령문이 아닌 경우 innodb_autoinc_lock_mode=2를 사용하는 것이 가장 좋습니다. . 더 나은 성능.

마지막으로 auto_increment에 대한 예로 마무리

예: auto_increment 열의 값을 업데이트하지 마세요

1단계: 장면 재현

create table t(x int auto_increment not null primary key);
insert into t(x) values(0),(null),(3);
select * from t;
+---+
| x |
+---+
| 1 |
| 2 |
| 3 |
+---+
로그인 후 복사

2단계: 문제가 발생한 SQL 재현

update t set x=4 where x=1;
select * from t;
+---+
| x |
+---+
| 2 |
| 3 |
| 4 |
+---+
로그인 후 복사

3단계: 일반적인 표현 형식 재현

insert into t(x) values(0);
ERROR 1062 (23000): Duplicate entry '4' for key 'PRIMARY'
로그인 후 복사

4단계: 문제 요약

Mysql은 첫 번째 단계를 실행한 후에 알게 됩니다. auto_increment 값은 4입니다.

두 번째 단계를 실행한 후, mysql은 4가 인위적으로 점유된 것을 알지 못하여 세 번째 단계 실행 시 오류가 발생하였다.

위 내용은 MySQL innodb_autoinc_lock_mode에 대한 자세한 소개의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿
회사 소개 부인 성명 Sitemap
PHP 중국어 웹사이트:공공복지 온라인 PHP 교육,PHP 학습자의 빠른 성장을 도와주세요!