Open BETTERFUTURE4 opened 2 years ago
이번에 5장 내용을 보면서 트랜잭션, 잠금 관련 구체적인 내용들이 많아 헷갈려서 개념을 한번 정리해봤다.
Partial update
MySQL 엔진
스토리지 엔진
MySQL 엔진 레벨
스토리지 엔진 레벨
GLOBAL LOCK
FLUSH TABLES WITH READ LOCK
사용 X
Backup Lock
MySQL 8.0 버전
Xtrabackup
Enterprise Backup
Table Lock
LOCK TABLES table_name [ READ | WRITE ]
Named Lock
GET_LOCK()
Metadata Lock
RENAME TABLE tab_a TO tab_b
InnoDB
information_schema
INNODB_TRX
INNODB_LOCKS
INNODB_LOCK_WAITS
Record Lock
인덱스의 레코드
Gap Lock
넥스트 키 락
Next Key Lock
STATEMENT 포맷
바이너리 로그
바이너리 로그 포맷
ROW
Auto Increment Lock
AUTO_INCREMENT
INSERT
REPLACE
UPDATE
DELETE
innodb_autoinc_lock_mode=0
innodb_autoinc_lock_mode=1
innodb_autoinc_lock_mode=2
MySQL
READ UNCOMMITTED
READ COMMITTED
REPEATABLE READ
SERIALIZABLE
5장
주제
이번에 5장 내용을 보면서 트랜잭션, 잠금 관련 구체적인 내용들이 많아 헷갈려서 개념을 한번 정리해봤다.
5. 트랜잭션과 잠금
5.1 트랜잭션
Partial update
) 발생 X1) 트랜잭션 원칙
트랜잭션 O
트랜잭션 X
5.2 잠금
MySQL 엔진
잠금 레벨,스토리지 엔진
잠금 레벨로 나뉨MySQL 엔진 레벨
의 잠금은 모든 스토리지 엔진에 영향을 미침스토리지 엔진 레벨
의 잠금은 스토리지 엔진 간 상호 영향을 미침1) MySQL 엔진 잠금
글로벌 락(
GLOBAL LOCK
)FLUSH TABLES WITH READ LOCK
사용 X
(MySQL 서버의 모든 테이블에 큰 영향)백업 락(
Backup Lock
)MySQL 8.0 버전
부터 도입Xtrabackup
이나Enterprise Backup
과 같은 백업 툴들의 안정적인 실행테이블 락(
Table Lock
)LOCK TABLES table_name [ READ | WRITE ]
네임드 락(
Named Lock
)GET_LOCK()
MySQL 8.0 버전
네임드 락 중첩 사용 기능, 현재 세션에서 획득한 네임드 락 모두 해제 기능 추가됨메타데이터 락(
Metadata Lock
)RENAME TABLE tab_a TO tab_b
같이 테이블의 이름을 변경하는 경우 자동으로 획득2)
InnoDB
스토리지 엔진 잠금InnoDB
의 트랜잭션과 잠금, 그리고 잠금 대기 중인 트랜잭션의 목록을 조회 가능information_schema
데이터베이스에 존재하는INNODB_TRX
,INNODB_LOCKS
,INNODB_LOCK_WAITS
라는 테이블을 조인해서 조회레코드 락(
Record Lock
)인덱스의 레코드
를 모두 잠금갭 락(
Gap Lock
)넥스트 키 락
의 일부로 자주 사용넥스트 키 락(
Next Key Lock
)STATEMENT 포맷
의바이너리 로그
사용시 사용됨바이너리 로그 포맷
을ROW
형태로 바꾸자(MySQL 8.0 기본 설정)자동 증가 락(
Auto Increment Lock
)AUTO_INCREMENT
: 자동 증가하는 숫자 값 칼럼(일련번호, 고유번호)INSERT
와REPLACE
쿼리 문장과 같이 새로운 레코드를 저장하는 쿼리에서만 걸리는 잠금UPDATE
,DELETE
등에서는 잠금 Xinnodb_autoinc_lock_mode=0
: 모든 INSERT 문장에서 잠금 사용innodb_autoinc_lock_mode=1
: 연속모드, 단순 몇건의 INSERT 문장에서는 래치(뮤텍스) 이용해 처리, STATEMENT 바이너리 포맷innodb_autoinc_lock_mode=2
: 인터리빙모드, 모든 곳에서 래치(뮤텍스) 이용해 처리(자동증가 락 X), ROW 바이너리 포맷3)
MySQL
격리 수준READ UNCOMMITTED
: 트랜잭션 변경 내용이 다른 트랜잭션에 공유됨, 거의 사용 XREAD COMMITTED
: 커밋이 완료된 데이터만 다른 트랜잭션에서 조회 -> 한 트랜잭션에서 중간에 바뀐값 조회 시 정합성 XREPEATABLE READ
: 현재 트랜잭션 시작 시의 데이터만 조회, 언두영역에 백업된 레코드 정보를 제공SERIALIZABLE
: 읽기 작업도 공유 잠금을 획득해야 함, 거의 사용 X관련페이지
5장