MySQL의 논리적 아키텍처

크게 3개의 층으로 나뉘어 있는 형태. 클라이언트 -> 핵심 엔진들 -> 스토리지 엔진으로 이어진다. 

이 책에서 MySQL의 아키텍처를 크게 3가지로 나눈 것은, MySQL 소스의 입장에서 생각해보면 쉽게 이해가 될 것이다. DB에 실제 접속하여 쿼리를 하는 등, MySQL을 사용하게 될 툴을 작성해야 할 것이고(이를테면 웹사이트) / MySQL 전체적으로 동일하게 적용될 내용들에 대해 작성해야 할 것이다. (이를테면, 테이블에 컬럼을 추가하기 위해서 어떤식으로 동작할 것인지, 두개의 테이블로부터 데이터를 select하려 할 때에, 두 테이블을 어떤 방식으로 조인하여 데이터를 추출해내야 할는지와 같은 부분) / 그리고 마지막으로 MySQL만의 큰 특징이라 할 수 있는 Pluggable한 스토리지 엔진을 작성해야 된다. 

위에도 언급했다싶이 클라이언트는 MySQL 그 자체의 특징과는 상관 없는 부분이므로 MySQL에 대해 처음 공부하는 사람이라 할지언정 클라이언트가 뭔지는 이해했을 것이라 생각한다.

그렇다면 스토리지 엔진과, 그 외의 엔진들만 제대로 구분해서 생각해낼 수 있다면 MySQL의 논리적 아키텍처 부분은 이해하고 넘어가는 것이 아닐까한다. 

위 그림에서 쿼리 캐시를 빼고, (쿼리 캐시는 나중에 쿼리캐시 기능을 살펴볼때 언급하도록 하겠다.)  연결/스레드 핸들링 , 파서 , 옵티마이저 부분만 놓고 보도록하자. 이 기능들은 MySQL이라는 RDBMS에만 있는 기능이 아니라, 데이터베이스론이라는 학문에서 언급되고 있는 기능으로, 다른 대부분의 RDBMS들도 가지고 있는 기능이다. 

연결 관리와 보안

그 중에서 연결/스레드 핸들링의 경우, DB를 사용하려는 사용자로부터 어떻게 요청을 받고, 보안을 유지하며, 요청에 응대할 것인지에 대한 내용을 담당하고 있다. 

보안에 관한 더 상세한 내용은 12장에 다시 언급된다.
만약 MySQL 소스를 열어볼 생각이 있다면 커넥션에 관한 내용은 /sql/sql_connect.cc라는 파일에 포함되어있다. 위에 5개 항목 중 위로부터 4개의 항목은 이 파일에서 관련 사항을 확인해볼 수 있다. 마지막 항목은 구문 분석 단계에서 체크되므로, /sql/sql_parse.cc 파일에서 확인할 수 있다.

최적화와 실행

정상적으로 접속이 이루어지고, 쿼리가 입력되면 파서에 의해 해당 쿼리를 분석하게 된다. 파서(Parser)가 하는 일, 즉, 파스(Parse)란 원래 언어학에서 사용되는 용어로, 하나의 문장이 문법적으로 맞는 문장인지를 분석하는 일을 말한다. 즉 파서가 하는 일은, 사용자가 입력한 쿼리문이 문법에 맞는 문장인지를 체크하는 것이다. 

 

동시성 제어

 

읽기 / 쓰기 잠금

 

잠금 세분성

 

테이블 잠금

 

레코드 락

 

트랜잭션

원자성

일관성

독립성/격리

영속성

 

 

격리수준

커밋되지 않은 읽기(READ UNCOMMITTED)

커밋된 읽기(READ COMMITTED)

반복 읽기(REPEATABLE READ)

직렬화된 읽기(SERIALIZABLE)

 

데드락

 

트랜잭션 로깅

 

MySQL의 트랜잭션

자동 커밋(AUTOCOMMIT)

트랜잭션 내에서 여러 스토리지 엔진 사용하기

암시적 잠금과 명시적 잠금

 

MVCC(다중 버전 동시성 제어)

 

MySQL의 스토리지 엔진

 

MyISAM 엔진
MyISAM 머지 엔진
InnoDB 엔진
Memory 엔진
Archive 엔진
CSV 엔진
Federated 엔진
Blackhole 엔진
NDB 클러스터 엔진
Falcon 엔진
SolidDB 엔진
PBXT(Primebase XT) 엔진
Maria 엔진
그 밖의 스토리지 엔진
적합한 엔진 선택하기
고려사항

 

 

실용 예제

 

스토리지 엔진 요약