728x90
- 네임드 락(Named Lock)
- GET_LOCK() 함수를 이용해 문자열에 대해 잠금을 설정할 수 있다.
- 단순히 사용자가 지정한 문자열에 대해 획득하고 반납하는 잠금이다.
- 자주 사용되지 않는다.
- 음..보다가 궁금증이 생겨 찾아봤다..굳이 네임드 락을 걸어야할까 그냥 레코드 락 걸면안되나?
- 레코드 락은 특정 레코드에 대한 접근을 제어하는 것이고, 네임드 락은 특정 테이블 이나 리소스에 대한 접근을 제어하는 것이다.
- 같은 테이블에서 여러 트랜잭션이 동시에 수행될 경우, 레코드 락은 특정 레코드만 잠글 수 있어서 문제가 발생할 수 있다.
- 네임드 락 같은 경우 테이블 전체에 대한 접근을 제어하기 때문에 같은 테이블에서 동시에 수행되는 트랜잭션을 모두 제어할 수 있다.
- 따라서 네임드 락을 설정하는 것은 트랜잭션 간의 경합을 막기 위해서 사용할 수 있다.
- 메타데이터 락
- 데이터베이스 객체(대표적으로 테이블이나 뷰 등)의 이름이나 구조를 변경하는 경우에 획득하는 잠금이다.
- 명시적으로 획득하거나 해제할 수 있는 것이 아니고 테이블의 이름을 변경하는 경우 자동으로 획득한다.
- rename table 명령의 경우 원본 이름과 변경될 이름 두개 모두 한꺼번에 잠금을 설정한다.
- 실시간 테이블을 바꿔야 하는 요건이 배치 프로그램에서 자주 발생하는데..
- 1.임시테이블 rank_new 애 서비스용 랭킹 데이터 생성
- 2.랭킹 배치가 완료되면 rank를 rank_backup 으로 백업
- 3.rank_new 테이블을 rank 로 대체
- ex) rename table rank TO rank_backup, rank_new TO rank
- 위와 같이 하나의 rename table 명령문에 두개의 rename 작업을 한꺼번에 실행하면 Table not found rank 같은 상황이 발생하지 않고 적용이 가능하다
- 하지만 아래와 같이 2개로 나눠서 실행하면 아주 짧은시간이지만 rank 테이블이 존재하지 않는 수간이 생기며 그 순간에 Table not found rank 오류를 발생시킨다
- rename table rank TO rank_backup;
- rename table rank_new TO rank;
- 때로는 메타데이터 잠금과 InnoDb의 트랜잭션을 동시에 사용해야 하는 경우도 있다.
728x90
'공부 > Mysql' 카테고리의 다른 글
[RealMysql 8.0]5 트랜잭션과 잠금 5.3 ~ 5.3.3 (0) | 2023.02.05 |
---|---|
mysql 트랜잭션 잠금 확인 쿼리. (0) | 2023.02.05 |
[RealMysql 8.0]5 트랜잭션과 잠금 5.1 ~ 5.2.2 테이블 락 (0) | 2023.02.04 |
mysql 잠금: 명시적 잠금, 묵시적 잠금 (0) | 2023.02.04 |
mysql 소스서버 레플리카 서버 (0) | 2023.02.04 |
댓글