MySQL 아키텍처

MySQL 서버 구조

MySQL 서버는 서버로부터 SQL 요청을 받고 해당 SQL을 처리하는 프로세스를 처리하기 위해 아래와 같은 순서로 디스크에 접근해서 요청을 처리한다.

MySQL엔진에서 쿼리를 처리하고, 스토리지 엔진을 통해 데이터를 쓰거나 읽을 수 있다.

 

 

 

MySQL 엔진

MySQL 엔진은 내부적으로 쿼리 파서, 전처리기, 옵티마이저, 쿼리 실행기를 가지고 있다.



쿼리 파서

SQL을 파싱하여 Syntax Tree를 만들고, 이 과정에서 문법 오류 검사를 수행한다.

쿼리 파싱 과정

 

전처리기

쿼리파서에서 만든 Tree를 바탕으로 전처리(preprocessing)를 수행한다.

ex) 테이블이나 컬럼 존재 여부, 접근 권한 등의 오류 검사

 

쿼리파서와 전처리기는 컴파일 과정과 매우 유사하지만, SQL은 프로그래밍 언어처럼 컴파일 타임이 존재하지 않는다.

따라서 쿼리를 실행할 때마다 검사를 진행하게 된다. 

 

** workbench와 같은 환경에서 쿼리를 실행하지 않고 작성만 해도 검사를 해주는 것은 MySQL에서 검사를 해주는 것이 아닌 workbench에서 검사를 해주는 것이다.

 

옵티마이저

쿼리를 처리하기 위한 여러 방법들을 만들고, 각 방법들의 비용정보와 테이블 통계정보를 이용해 비용을 산정한다.

테이블 순서, 불필요한 조건 제거, 통계 정보를 바탕으로 전략을 결정한다. (실행 계획)

 

옵티마이저가 어떤 전략을 결정하느냐에 따라 성능이 많이 달라지고, 옵티마이저가 좋지않은 판단을 했을 때 개발자가 힌트를 제공해줄 수 있다.

 

** 예를 들어 인덱스가 여러 개 일 때 옵티마이저가 최적의 인덱스를 고르지 못할 수 있다. 이런 경우 개발자가 직접 인덱스를 지정해주어 도움을 줄 수 있다.

 

쿼리 실행기

옵티마이저가 결정한대로 스토리지 엔진에 요청을 보내는 역할을 한다. 이때 쿼리 실행기는 Handler API를 사용해 스토리지 엔진으로 요청을 보내게 된다.

 

핸들러 API의 인터페이스 요구사항을 준수한다면 스토리지 엔진을 직접 구현하는 것도 가능하다.

** 대부분은 디폴트인 InnoDB를 사용한다.

'데이터베이스 > MySQL' 카테고리의 다른 글

MySQL 인덱스  (1) 2024.01.04
정규화  (1) 2024.01.04
해시 태그 테이블 설계  (0) 2023.12.28
[MySQL] INSERT INTO SELECT  (0) 2023.05.09
[MySQL] workbench ERD 자동 생성  (0) 2023.04.15