TIL
-
2024.07.27~28 gap lockTIL 2024. 8. 1. 00:42
락 관련 문서 MySQL Gap Lock (두번째 이야기)Why ?medium.com 위의 글을 보면 데이터 페이지에 따른 잠금을 소개하고 있다.. 실제 개발 시 이런 것까지 확인하기는 힘든데, 이로 인해 잠금이 발생한 다는 것을 모를 수 있다. gap lock을 사용하는 쿼리를 사용할 때 데이터 페이지에 마지막이 조건의 끝에 들어간다면 supremum pseudo-record에 락을 잡는다는 것이다. 존재하지 않는 행에 대한 gap lock SELECT … FOR UPDATE on non-existent rowsi am interested about locks when "select ... for update on non-existed rows"; currently, the data in table '..
-
2024.07.23 gap lockTIL 2024. 7. 23. 00:17
gap lock MySQL Gap Lock 다시보기우리가 일반적으로 알고 있는 데이터베이스 서버의 잠금(Lock)은 레코드 자체에 대한 잠금(Record Lock)이에요. 어떤 트랜잭션에서 레코드를 변경하기 위해서는 그 레코드를 잠그고, 그 동안은 다른medium.com음 pk와 uk는 gap lock을 사용하지 않고 record lock만 사용.non unique secondary index는 항상 record lock과 gap lock을 사용. 값이 없을 때는 record lock 없이 gap lock만 획득 -> select, delete가 대기 없이 실행.4, 5가 'INSERT Intention Gap Lock'을 필요로 하고 서로의 gap lock을 기다리면서 dead lock이 발생.pk,..
-
2024.07.22 gap lockTIL 2024. 7. 22. 23:04
InnoDB의 Lock 처리 방식 - miintto.log필자가 속한 개발팀의 여러 Django 프로젝트에서는 데이터베이스의 동시성을 제어하기 위해 select_for_update() 메소드가 적용되어 있습니다. 비슷하게 SQLAlchemy 라이브러리에서는 with_for_update() 메소miintto.github.ioselect for update를 이어서 보면..mysql에서는 next key lock을 사용한다(innodb repeatable read). gap lock과 record lock을 합친 형태.인덱스를 걸지 않은 컬럼에 사용하면 테이블 fullscan하니 테이블 전체에 lock이 걸린다. 조심하라. uk를 조건에 사용하면 next key lock을 사용하지 않고 단일 레코드에만 ..
-
2024.07.21 select for updateTIL 2024. 7. 21. 21:48
select for update 시 행이 없다면? select .. for update 대상 유무에 따른 잠금 상태개요 InnoDB 엔진은 기본적으로 DDL 쿼리를 제외한 모든 데이터 조작 작업에서 테이블 락을 사용하지 않고 레코드 기반의 잠금 방식을 사용합니다. 더 자세히는 레코드 자체보다는 인덱스에 잠금dkswnkk.tistory.com select for update 시 잠금에 대한 내용이다.요약하자면 repeatable read 격리 수준에서 phantom read를 막기 위해 gap lock을 잡는다아래와 같이 처음 발견된 레코드(12)와 쿼리가 정의한 범위 내의 빈 공간의 수정을 방지하는 것이다.SELECT * FROM t_user WHERE id > 10 FOR UPDATE; 존재하지 않는 ..
-
2024.07.19 분산 트랜잭션, TCCTIL 2024. 7. 20. 20:12
분산 트랜잭션 REST 기반의 간단한 분산 트랜잭션 구현 - 1편 | PopitREST 기반의 간단한 분산 트랜잭션 구현 -1편 TCC 개관 REST 기반의 간단한 분산 트랜잭션 구현 - 2편 TCC Cancel, Timeout REST 기반의 간단한 분산 트랜잭션 구현 - 3편 TCC Confirm(Eventual Consistency) REST 기반의 www.popit.kr 동시성 문제 해결 전략 - 스프링으로 구현한 TCC패턴STEP 1. 주문 재고 서비스에서의 동시성 문제 STEP 1.1 동시성 문제 해결 전략 STEP 1.1.1 낙관적 락(Optimistic Lock) STEP 1.1.2 비관적 락(Pessimitic Lock) STEP 1.1.3 단일 쓰레드 메시지 큐 도입 STEP 2. 분산..
-
2024.07.12 포프TIL 2024. 7. 12. 23:24
회의가 끝나고 똑같은 질문을 하는 것을 멈추려면 회의에 집중하고 기록하자. 1인분을 하려면 1.2인분을 해야 한다. 협업은 돕고 돕는 것이며, 도움을 받을 줄도, 줄 줄도 알아야 한다. 고무 오리 디버깅 - 위키백과, 우리 모두의 백과사전위키백과, 우리 모두의 백과사전. 코드 검토를 위해 개발자가 사용하는 고무 오리 소프트웨어 공학에서 고무 오리 디버깅(영어: rubber duck debugging)은 코드를 디버깅하는 방법이다. 이름은 《실용ko.wikipedia.org
-
2024.07.10~11 Query TuningTIL 2024. 7. 11. 23:33
쿼리 튜닝을 해야 하는 일이 있다. 쿼리에서 불필요한 join이 있는지 확인하고 삭제 처리를 하자.group by 절까지 삭제가 가능할 수 있다.임시 테이블 사용 가능성이 있어 삭제할 수 있음 하자group by 절이 내부적으로 어떻게 동작하는가? -> 공부 필요count 쿼리의 성능 저하페이징 기능 구현 중 count 쿼리가 필요하다데이터가 증가하면 할수록 count 쿼리가 느려진다index를 사용함에 불구하고 느리다클러스터드 인덱스 값을 사용하게 되면 더 느린데 이유는 무엇인가인덱스 값뿐 아니라 저장된 데이터까지 읽어야 하기 때문인가커버링 인덱스수정 대상이 검색 쿼리다. 조건절이 많은 join과 연관이 있고 동적으로 변화된다.커버링 인덱스를 설계할 수 있을까? 조건의 순서를 정하고 인덱스를 설계해야 ..
-
2024.07.09 locking IntroductionTIL 2024. 7. 9. 23:16
https://dev.mysql.com/blog-archive/innodb-data-locking-part-1-introduction/ MySQL :: InnoDB Data Locking - Part 1 "Introduction"In this blog series, I’d like to introduce you gently to the topic on which I was working last 2 years, which is improving how InnoDB locks data (tables and rows) in order to provide illusion to clients that their queries are executed one after another,dev.mysql.com음inn..