[MySQL] MySQL 엔진의 락 (Lock)

2023. 8. 15. 08:00· MySQL
목차
  1. 💋 락 (Lock)
  2. ✔ 분류
  3. 💋 MySQL 엔진의 락 (Lock)
  4. ✔ 글로벌 락
  5. ✔ 테이블 락
  6. ✔ 네임드 락
  7. ✔ 메타데이터 락
  8. 💋 참고자료
반응형

 

 

💋 락 (Lock)

✔ 분류

  • MySQL에서 사용되는 락은 크게 스토리지 엔진 레벨과 MySQL 엔진 레벨로 분류
  • 스토리지 엔진 레벨의 락
    • 스토리지 엔진 간 상호 영향을 미치지 않음. 
  •  MySQL 엔진 레벨의 락
    • 모든 스토리지 엔진에 영향을 미침.
    • 테이블 데이터 동기화를 위한 테이블 락 이외에도 메타데이터 락, 네임드 락 기능 존재

 

이번 포스팅에서는 MySQL 엔진 레벨의 락에 대해서 설명할 것이다! 

 

💋 MySQL 엔진의 락 (Lock)

✔ 글로벌 락

  • FLUSH TABLES WITH READ LOCK 명령으로 획득
  • 영향 범위는 MySQL 서버 전체로, MySQL에서 제공하는 락 중 가장 범위가 크다.
  • 실행과 동시에 MySQL 서버에 존재하는 모든 테이블을 닫고 잠금을 건다.
  • 한 세션에서 글로벌 락을 획득하면 다른 세선에서는 SELECT를 제외한 대부분의 문장을 실행하지 못하고 대기
  • 작업 대상 테이블이나 데이터베이스가 다르더라도 동일하게 영향을 미침
  • 웹 서비스용으로 사용되는 서버에서는 가급적 사용하지 않는 것이 좋음.
  • 이 명령을 실행하기 위해서는 테이블에 읽기 락을 걸어야 하므로, 먼저 테이블에 실행중이던 모든 종류의 쿼리가 완료되어야 함
  • InnoDB 스토리지 엔진의 사용이 일반화되면서, 트랜잭션이 지원되어 일관된 데이터 상태를 위해서 모든 데이터 변경 작업을 멈출 필요가 없어지면서 글로벌 락의 사용이 줄어들었다. 

 

✔ 테이블 락

  • 개별 테이블 단위로 설정되는 락
  • 명시적, 혹은 묵시적으로 특정 테이블 락을 설정할 수 있다. 
    • 명시적
      • LOCK TABLES table_name [ READ | WRITE] 명령으로 락 획득, UNLOCK TABLES 명령으로 락 반납
      • 애플리케이션에서 거의 사용할 필요 없으며, 글로벌 락과 동일하게 웹 작업에서 상당한 영향을 미침.
    • 묵시적
      • 쿼리가 실행되는 동안 자동 획득, 쿼리가 완료된 후 자동 해제
      • MyISAM이나 MEMORY 테이블에 데이터를 변경하는 쿼리를 실행하면 발생
      • MySQL 서버가 데이터가 변경되는 테이블에 잠금을 설정하고 데이터를 변경한 후, 즉시 잠금을 해제하는 형태로 사용
        • 참고: InnoDB 테이블은 스토리지 엔진 차원에서 레코드 기반의 잠금을 제공하기 때문에, 단순 데이터 변경 쿼리(대부분의 DML)에서는 테이블 락이 설정되지 않고, 스키마를 변경하는 쿼리(DDL)의 경우에만 영향을 미침.

 

✔ 네임드 락

  • GET_LOCK() 함수를 통해 임의의 문자열에 대해 잠금 설정
  • 대상이 테이블, 레코드, 데이터베이스 객체가 아니라, 단순히 사용자가 지정한 문자열에 대해 획득하고 반납하는 잠금
  • 많은 레코드에 대해 복잡한 조건으로 레코드를 변경하는 트랜잭션에서 유용
  • 자주 사용되지 않음. 

 

✔ 메타데이터 락

  • 데이터베이스 테이블, 뷰의 이름이나 구조를 변경하는 경우에 획득하는 락
  • RENAME TABLE table_a TO table_b와 같이 테이블 이름을 변경하는 경우 자동으로 획득 (명시적 획득 불가) 

 

 

 

💋 참고자료

  • Real MySQL 8.0 1편

 

 

반응형
저작자표시 비영리 변경금지 (새창열림)

'MySQL' 카테고리의 다른 글

[MySQL] 트랜잭션의 격리수준: 이상 현상(Dirty Read, Non-Repeatable Read, Phantom Read)의 정의  (2) 2023.08.30
[MySQL] MVCC와 언두 로그(Undo log)  (0) 2023.08.29
[MySQL] MySQL 아키텍처: 접속 클라이언트, MySQL 엔진, 스토리지 엔진, 운영 체제, 하드웨어  (0) 2023.08.14
[MySQL] 트랜잭션: 트랜잭션의 개념, 주의사항, 트랜잭션 VS 락 (Real MySQL 8.0)  (0) 2023.08.13
[MySQL] ON DELETE CASCADE: foreign key로 묶인 테이블의 레코드를 삭제할 때, 해당 레코드를 참조하는 다른 테이블의 레코드도 함께 자동으로 삭제하기  (0) 2023.05.08
  1. 💋 락 (Lock)
  2. ✔ 분류
  3. 💋 MySQL 엔진의 락 (Lock)
  4. ✔ 글로벌 락
  5. ✔ 테이블 락
  6. ✔ 네임드 락
  7. ✔ 메타데이터 락
  8. 💋 참고자료
'MySQL' 카테고리의 다른 글
  • [MySQL] 트랜잭션의 격리수준: 이상 현상(Dirty Read, Non-Repeatable Read, Phantom Read)의 정의
  • [MySQL] MVCC와 언두 로그(Undo log)
  • [MySQL] MySQL 아키텍처: 접속 클라이언트, MySQL 엔진, 스토리지 엔진, 운영 체제, 하드웨어
  • [MySQL] 트랜잭션: 트랜잭션의 개념, 주의사항, 트랜잭션 VS 락 (Real MySQL 8.0)
깃짱
깃짱
연새데학교 컴퓨터과학과 & 우아한테크코스 5기 백엔드 스타라이토 깃짱
반응형
깃짱
깃짱코딩
깃짱
전체
오늘
어제
  • 분류 전체보기
    • About. 깃짱
    • Weekly Momentum
      • 2024
    • PROJECT
      • AIGOYA LABS
      • Stamp Crush
      • Sunny Braille
    • 우아한테크코스5기
    • 회고+후기
    • Computer Science
      • Operating System
      • Computer Architecture
      • Network
      • Data Structure
      • Database
      • Algorithm
      • Automata
      • Data Privacy
      • Graphics
      • ETC
    • WEB
      • HTTP
      • Application
    • C, C++
    • JAVA
    • Spring
      • JPA
      • MVC
    • AI
    • MySQL
    • PostgreSQL
    • DevOps
      • AWS
      • 대규모 시스템 설계
    • frontend
      • HTML+CSS
    • NextJS
    • TEST
    • Industrial Engineering
    • Soft Skill
    • TIL
      • 2023
      • 2024
    • Linux
    • Git
    • IntelliJ
    • ETC
      • 日本語

블로그 메뉴

  • 홈
  • 깃허브

인기 글

최근 글

태그

  • OOP
  • 조합
  • 상속
  • 컴포지션
  • 예외
  • 우아한테크코스
  • 함수형프로그래밍
  • 스트림
  • 람다
  • Stream
  • lamda
  • 람다와스트림
  • Composition
  • TDD
  • 상속과조합
  • 레벨로그
  • 우테코5기
  • 우아한테크코스5기
  • 우테코
  • Java
hELLO · Designed By 정상우.v4.2.0
깃짱
[MySQL] MySQL 엔진의 락 (Lock)
상단으로

티스토리툴바

개인정보

  • 티스토리 홈
  • 포럼
  • 로그인

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.