책너두 6기 15일차 백은빈, 이성욱의 Real MySQL8.0 1권 p.160 ~ p.169 내용정리 05 트랜잭션과 잠금 5.2 MySQL 엔진의 잠금 MySQL에서 사용되는 잠금은 크게 스토리지 엔진 레벨과 MySQL 엔진 레벨로 나눌 수 있다. MySQL 엔진은 서버에서 스토리지 엔진을 제외한 나머지 부분으로 이라 볼 수 있다. 5.2.1 글로벌 락 글로벌 락(GLOBAL LOCK)은 가장 범위가 크다. 한 세션엣 획득하면 다른 세션에서 SELECT를 제외한 대부분의 문장이 대기 상태로 남는다. MySQL 서버 전체에 영향을 미치며 테이블이나 데이터베이스가 달라도 미친다. Xtrabackup이나 Enterprise Backup 과 같은 백업 락: 조금 더 가벼운 글로벌 락. 일반적인 테이블의 데이터 변경은 허용된다. 5.2.2 테이블 락 테이블 락(Table Lock)은 ㄱ별적인 테이블 단위로 설정되는 잠금. 명시적 또는 묵시적으로 획득할 수 있다. 5.2.3 네임드 락 네임드 락(Named Lock)은 GET_LOCK()함수를 이용해 임의의 문자열에 대해 잠금을 설정할 수 있다. 단순히 사용자가 지정한 문자열(String)에 대해 획득하고 반납(해제)하는 잠금이다. 5.2.4 메타데이터 락 메타데이터 락(Metadata Lock)은 데이터베이스 객체(테이블이나 뷰 등)의 이름이나 구조를 변경하는 경우에 획득하는 잠금이다. 명시적으로 획득하거나 해제하지 않는다. 테이블의 이름을 변경하는 경우 자동으로 획득하는 잠금 5.3 InnoDB 스토리지 엔진 잠금 5.3.1 InnoDB 스토리지 엔진의 잠금 잠금 정보가 상당히 작은 공간으로 관리되기 때문에 레코드락 -> 페이지락 or 테이블락 으로 레벨업 되는 경우(락 에스컬레이션)는 없다. 5.3.1.1 레코드 락 레코드 자체만을 잠그는 것(Reocord lock, Record only lock)이라고 한다. 다른 상용 DBMS의 레코드 락과 동일한 역할을 한다. 5.3.1.2 갭 락 갭 락(Gap lcok)은 레코드 자체가 아니라 레코드와의 바로 인접한 레코드 사이의 간격만을 잠그는 것을 의미한다. 레코드와 레코드 사이의 간격에 새로운 레코드가 생성(Insert)되는 것을 의미한다. 5.3.1.3 넥스트 키 락 레코드락과 갭 락을 합쳐 놓은 형태가 넥스트 키 락(Next key lock)이라고 한다. 5.3.1.4 자동 증가 락 읽고 나서 다양한 Lock의 종류가 있다. 알아는 두자 ...

2023년 9월 20일 · 2 분 · 배준수