3.1.1 MYSQL 전체 구조

-------------------- --------------
응용프로그램
-------------------- --------------
Mysql 엔진
--------------------   Mysql 서버 
스토리지 엔진
-------------------- --------------
운영체제 & 하드웨어 
-------------------- --------------

mysql 엔진 : 클라이언트로부터의 접속 및 쿼리 요청을 처리하는 커넥션 핸들러와 SQL 파서 및 전처리기 옵티마이져가 중심을 이룬다.

스토리지 엔진 : 요청된 SQL 문장을 분석하거나 최적화, 실제 데이터를 디스크 스토리지에 저장하거나 데이터를 읽어오는 부분 Mysql 엔진은 하나지만 스토리지 엔진은 여러 개를 동시에 사용할 수 있다.

핸들러 API : Mysql 엔진의 쿼리 실행기에서 데이터를 읽거나 쓸때 각 스토리지 엔진에게 요청하는데 이런 요청을 핸들러 요청이라하고 여기서 사용하는 api 를 핸들러 api 라고 한다.

3.1.2 Mysql 스레딩 구조

프로세스 기반이 아닌 스레드 기반으로 작동하며, 크게 포그라운드 스레드와 백그라운드 스레드로 구분한다.

포그라운드 스레드 : 최소한 Mysql 서버에 접속된 클라언트의 수만큼 존재, 주로 클라이언트가 요청하는 쿼리 문장을 처리하는 것이 임무다. 커넥션을 종료하면, 해당 커넥션을 담당하던 스레드는 다시 스레드 캐시로 돌아간다.

백그라운드 스레드 : MyISAM은 별로 해당사항이 없지만, InnoDB 는 여러가지작업이 백그라운드로 처리된디ㅏ. 대포적으로 인서트 버포를 병합하는 스레드, 로그를 디스크로 기록하는 스레드, InnoDB 버퍼 풀의 데이터를 디스크에 기록하는 스레드, 데이터를 버퍼로 읽어들이는 스레드, 기타 여러 잠금이나 데드락을 모니터링 하는 스레드가 있다.

3.1.3 메모리 할당 및 사용 구조

Mysql 서버  
-----------------      ------------------------
글로벌 메모리 영역           로컬(세선) 메모리 영역
-----------------      ------------------------
키 캐시, 버퍼풀              커넥션 버퍼, Result 버퍼
쿼리캐시, 로그버퍼,          Read 버퍼, 조인 버퍼 ,
바이너리 로그버퍼,           랜덤 Read 버포, 정렬버퍼 
테이블 캐시 

두 영역의 차이는 Mysql 서버 내에 존재하는 많은 스레드가 공유해서 사용하는 공간인지 아닌지에 따라 구분되며 각각 다음과 같은 특징이 있다.

글로벌 메모리 영영 : 일반적으로 하나의 메모리 공간만 할당된다. 필요에 따라. N개라 하더라도 모든 스레드에 의해 공유된다. 로컬 메모리 영역 : 세션 메모리 영역이라고도 표현하며, 클라이언트 스레드가 쿼리를 처리하는데 사용하는 메모리 역역이다. 로컬 메모리는 각 클라이언트 스레드별로 독립적으로 할당되면 절대 공유되어 사용되지 않는다는 특징이 있다.

3.1.4 플러그인 스토리지 엔진 모델

Mysql 의 독특한 구조중 대표적인 것이 바로 플러그인 모델이다.

sql 파서 -> sql 옵티마이저 -> sql 실행기 -> 데이터 읽기/쓰기  -> Disk Storege
<---------------------------------------><-----------------><---------------->
            mysql 엔진 처리 영역           스토리지 엔진 처리영역  디스트 스토리지 

3.1.5 쿼리 실행 구조

쿼리 컴파일러
- 쿼리 파서 -> 전터리기 -> 옵티마이저 -> 쿼리실행기

스토리지 엔진

하드웨어

파서 : 쿼리 문장을 토큰으로 분리해 드리 형태의 구조로 만들어 내는 작업을 의미한다. 기본 문법 오류를 걸러낸다. 전처리기 : 파서 트리를 기반으로 쿼리 문자에 구조적인 문제점이 있는지 확인한다. 실제 존재하지 않거나 권한상 사용할 수없는 개체의 토큰은 이단계에서 걸러진다. 옵티마이저 : 저렴한 비용으로 가장 빠르게 처리할지 결정하는 역할을 담당한다. 실행엔진 : 옵티마이저가 두뇌라면 실행엔진과 핸들러는 손과 발에 비유할 수 있다. 핸들러 : Mysql 서버의 가장 밑단에서 Mysql 실행 엔진의 요청에 따라 데이터를 디스크로 정장하고 읽어오는 역할을 담당한다.

3.1.6 복제(Replication)

복제는 2대 이상의 Mysql 서버가 동일한 데이터를 담도록 실시간으로 동기화 하는 기술이다.

3.1.7 쿼리캐시

여러가지 복잡한 처리 절차와 꽤 큰 비용을 들여 실핸된 결과를 쿼리 캐시에 담아 두고, 동일한 쿼리 요청이 왔을때 간단하게 쿼리캐쉬에서 찾아서 바로 결과를 내려줄 수 있기 때문에 기대 이상의 효과를 거둘 수 있다.