본문 바로가기

데이터베이스3

MySQL(InnoDB)이 잠금할 레코드를 고르는 방법 MySQL 을 처음 공부할 때, 레코드 잠금에 관해서 여러가지 궁금한 점들이 많았다. 그동안 궁금했던 세부적인 부분들에 대해서 정리해보고자 한다.MySQL 은 기본적으로 잠금 읽기(locking read), update, delete 문에 대해서 잠금을 걸 때, 스캔되는 모든 인덱스에 잠금을 건. WHERE 조건에 특정 행(row)를 제외할 수 있다고 하더라도, 이와 관계 없이 스캔되는 모든 인덱스에 잠금을 걸게 된다.Q. WHERE 절을 기반으로 스캔되는데, 왜 WHERE 절과 관계 없이 레코드 잠금이 걸린다고 할까?참고로, 이 내용은 REPEATABLE READ 에 해당하는 내용으로, READ COMMITTED 에서는 다르게 동작한다. WHERE 절을 기반으로 레코드를 조회하는 것은 맞다.하지만, M.. 2024. 6. 5.
redis lock 1부 (feat. Redlock) 분산 락이란?분산 락은 여러 개의 클라이언트가 특정 리소스에 접근할 때, 한번에 하나의 클라이언트만 접근(mutual exclusive) 할 수 있도록 하는 메커니즘이다.분산락의 조건분산 락은 최소한 아래의 조건을 만족시켜야한다.safety: 하나의 클라이언트만 리소스에 접근할 수 있어야한다. (mutual exclusive)deadlock free: 특정 클라이언트가 락 획득 후 죽는다고 해도, 결국에 다른 클라이언트가 락을 획득 할 수 있어야한다.fault tolerance: 일부 레디스 노드가 죽는다고해도, 대다수가 살아있다면 락 획득을 할 수 있어야한다.redlock 이전 라이브러리들의 문제?레디스 공식문서에 의하면, redlock 이전의 라이브러리들은 문제가 있었다고 한다.그것은 redis re.. 2024. 5. 3.
왜 많은 회사들은 READ COMMITTED를 사용할까? 한 줄 요약: 여러가지 이유가 더 있겠지만, Gap Lock으로 인한 Dead Lock 발생 문제가 크다.  사내에서 왜 READ COMMITTED를 쓰는지에 대한 질문과 답변을 보고, 공부하여 정리한 글입니다. 1. 왜 READ-COMMITTED를 사용할까 ?대부분의 서비스 회사는 MySQL을 쓰는 경우 READ COMMITTED를 사용한다고 합니다.MySQL은 default isolation-level이 REAPEATABLE-READ를 사용하고 있는데, 왜 READ-COMMITTED로 조정하여서 사용하고 있을까요?2. Gap lock 이란 무엇인가?참고: https://dev.mysql.com/doc/refman/8.0/en/innodb-locking.html#innodb-gap-locksgap lo.. 2023. 7. 7.