ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Mysql Lock이란?
    Database/Mysql 2023. 2. 6. 00:11

    Lock 이란?

     리소스로의 접근 경쟁을 제어하기 위한 잠금 장치이다. 메모리로 접근할 수 있는 문을 잠궈서(lock을 걸어서) 스레드가 메모리로 접근하지 못하게 하거나 (운영체제 관점) DB 데이터에 접근할 수 있는 문을 잠궈서(lock을 걸어서) 트랜잭션이 데이터에 접근하지 못하게 하는 (DB 관점) 등 리소스를 보호하기 위한 다양한 경우에 사용하는 상호배제를 위한 '개념'이다. 이 개념은 뮤텍스나 세마포어 등 다양한 형태로 구현된다.


    Mysql에서의 Lock 종류

    공유 잠금(Shared lock, 일명 s lock)

    - 한 트랜잭션이 특정 데이터에 lock을 걸어도 다른 트랜잭션에서 그 데이터에 읽기 접근은 가능하다. 쓰기 등 다른 접근은 불가능하다.

    - read lock이라고도 불륀다. (개인적으로는 readable lock이 명확한 명칭인 것 같다.)

    배타 잠금(eXclusive lock, 일명 x lock)

    - 한 트랜잭션이 특정 데이터에 lock을 걸면 다른 트랜잭션에서 어떠한 형태로도 그 데이터에 접근하는 것이 불가능하다.

    - write lock이라고도 불륀다. (개인적으로는 unreadable lock이 명확한 것 같다.)


    Mysql Lock 적용

    열(row)

    - row 단위로 s lock 또는 x lock을 적용한다.

    - s lock 적용 명령어: select lock in share mode

    - x lock 적용 명령어: select for update

    열(record)

    - row의 index를 단위로 s lock 또는 x lock을 적용한다.

    - 해당 row에 index가 생성되어 있지 않으면 테이블 생성 시 함께 생성되는 default clustered index에 lock을 적용한다.

    - s lock 적용 명령어: select lock in share mode

    - x lock 적용 명령어: select for update

    열 범위(gap)

    - row의 index gap 단위로 s lock 또는 x lock을 적용한다.

    - where 절 내 범위에 해당하는 index 모두에 lock을 적용한다.

    - dead lock의 주범이다.

    - gap lock 주의사항

    열 + 열 범위(next key)

    - record lock과 gap lock이 동시에 적용

    https://jaeseongdev.github.io/development/2021/06/16/Lock%EC%9D%98-%EC%A2%85%EB%A5%98-(Shared-Lock,-Exclusive-Lock,-Record-Lock,-Gap-Lock,-Next-key-Lock)/

    테이블(table)

    - table 단위로 s lock 또는 x lock을 적용한다.

    - s lock 적용 명령어: lock table read

    - x lock 적용 명령어: lock table write

    'Database > Mysql' 카테고리의 다른 글

    DB Transaction  (0) 2021.07.17
    MyISAM vs InnoDB (링크)  (0) 2021.06.23

    댓글

Designed by Tistory.