TIL

4.1 MySQL 엔진 아키텍처

4.1.1 MySQL 전체 구조

img.png MySQL 서버는 크게 MySQL 엔진스토리지 엔진으로 구분할 수 있다. 이 둘을 합쳐서 MySQL 서버라고 표현한다.

MySQL 엔진

스토리지 엔진

핸들러 API

4.1.2 MySQL 스레딩 구조

img.png

클라이언트 요청을 처리할 때 쓰기 작업은 지연(버퍼링) 되어 처리될 수 있지만 읽기 작업은 절대 지연될 수 없다. InnoDB 포함 많은 DBMS는 쓰기 작업을 버퍼링해서 일괄 처리하는 기능을 탑재하고 있다. (MyISAM은 그렇지 않고 클라이언트 스레드가 쓰기까지 함께 처리) 때문에 InnoDB에서는 insert, update, delete 쿼리가 나갈 때 데이터가 디스크에 완전히 저장될 때까지 기다리지 않아도 된다.

4.1.3 메모리 할당 및 사용 구조

MySQL에서 사용되는 메모리 공간은 크게 글로벌 메모리 영역로컬 메모리 영역으로 구분된다.

글로벌 메모리 영역

로컬 메모리 영역 (세션 메모리 영역)

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

4.1.5 컴포넌트

MySQL 플러그인의 단점

컴포넌트

4.1.6 쿼리 실행 구조

쿼리 파서

전처리기

옵티마이저

실행 엔진

핸들러(스토리지 엔진)

4.1.8 쿼리 캐시

4.1.9 스레드 풀

커뮤니티 에디션은 스레드 풀 기능이 없지만 엔터프라이즈 에디션은 스레드 풀 기능을 제공한다. 엔터프라이즈 에디션에 포함된 스레드 풀 대신 Percona Server에서 제공하는 스레드 풀도 존재한다.

스레드 풀이란

Percona Server 스레드 풀

4.1.10 트랜잭션 지원 메타데이터

딕셔너리와 시스템 테이블 모두 트랜잭션 기반의 InnoDB 스토리지 엔진에 저장되도록 개선되면서 스키마 변경 작업 중간에 MySQL 서버가 비정상적으로 종료되어도 스키마 변경이 완전한 성공 또는 완전한 실패로 정리된다.