- InnoDB의 Record Lock에서 왜 인덱스를 잠그나? (궁금해서 찾아봤는데 책 뒷부분에 나왔다.)
- Online DDL
- InnoDB Record Lock에서 테이블에 인덱스가 없다면?
develop-hani / real-mysql-study Goto Github PK
View Code? Open in Web Editor NEW책 Real MySQL 스터디
책 Real MySQL 스터디
p.246 페이지 잠금이 인덱스 정순 스캔에 적합한 구조
에 대한 설명이 나와있지 않아 찾아 보았다.
InnoDB 스토리지 엔진에서 페이지 잠금 과정에서 데드락을 방지하기 위해서 B-Tree의 왼쪽에서 오른쪽 순서로 잠금을 획득한다.
<참고자료>
업데이트 시에 WHERE 절의 column을 이용하여 락을 건다.
예를 들면 SELECT c1 FROM t1 WHERE c1=50 FOR UPDATE
에서 t1 테이블의 c1이 50인 모든 레코드에 락을 건다는 것이다.
모든 레코드에 락을 걸기보다 인덱스에만 락을 걸었을 때 잠금의 범위가 작아진다.
FOR UPDATE
가정 먼저 LOCK을 획득한 SESSION의 SELECT 된 ROW들이 UPDATE 쿼리후 COMMIT 되기 이전까지 다른 SESSION들은 해당 ROW들을 수정하지 못하도록 하는 기능
현업에서는 Foreign Key를 사용하지 않는 것이 추세라고 해서 그 이유를 살펴보았다.
<참고자료>
p.168에선 인덱스가 하나도 없는 테이블이더라도 내부적으로 자동 생성된 클러스터 인덱스를 이용해 잠금을 설정한다
고 하는 반면,
p172에선 이 과정에서 테이블에 있는 30여만 건의 모든 레코드를 잠근다
고 나온다.
인덱스를 이용해 잠그는 것과 모든 레코드를 잠그는 것이 상반되는 뜻인 것 같아 생각해 보았다.
클러스터 인덱스
PK를 기준으로 정렬되어 있는 인덱스
책에서 예제로 주어진 employees 테이블에서 first_name과 last_name이 PK가 아니므로 모든 레코드를 일일이 탐색하며 살펴보아야한다는 의미로 이해했다.
p.256을 살펴보면 ST_Distance()와 ST_Distance_Sphere() 함수는 공간 인덱스를 효율적으로 사용하지 못하기 때문에 ...
라고 한다. 이 문장을 처음 읽었을 때 잘 이해가 되지 않았어서 정리해 두었다.
MySQL Reference에 따르면 두 함수는 아래와 같이 정의되어 있다.
R-Tree는 포함관계를 이용해 만들어진 인덱스이다.
따라서 포함관계를 이용해 비교하는 ST_Contains에서는 효율적으로 사용할 수 있다.
그러나 두 geometry의 거리를 비교하는 ST_Distance는 포함관계를 이용하는 것이 아니므로 R-Tree를 효율적으로 사용할 수 없다.
<참고자료>
p.165에서 메타데이터 잠금과 InnoDB의 트랜잭션을 동시에 사용하는 경우를 살펴보며 Online DDL이 나온다.
Online DDL
테이블이 변경되는 동안 SELECT 쿼리와 DML을 계속 처리 할 수 있도록 하는 기능
DML이 빈번하게 일어날 때, 변경 내용을 임시로 저장하는 버퍼의 공간 부족으로 실패할 수 있다.
<참고자료>
스터디를 진행하며 관련 자료에 대한 소개를 받았는데, 생각해보면 좋을 것 같다.
<참고자료>
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.