[Real MySQL, 3장 - 아키텍처] MySQL 엔진, 스토리지 엔진
Database

[Real MySQL, 3장 - 아키텍처] MySQL 엔진, 스토리지 엔진

1. 알고자 하는 것

  • MySQL 엔진
  • 스토리지 엔진
  • 쿼리의 전체적인 실행 구조

 

2. 알게된 것

MySQL 엔진

  • 클라이언트, 서버 등에서 요청한 SQL 문장의 파싱 및 최적화를 수행
  • DBMS의 두뇌로 비유
  • 크게 커넥션 핸들러, SQL Parser, 전처리기, 옵티마이저로 구성
    • 커넥션 핸들러 : 클라이언트와의 접속, 스토리지 엔진에게 데이터 R/W 쿼리 요청
    • SQL Parser : 클라이언트가 요청한 쿼리를 MySQL이 인식할 수 있는 단위 (토큰)로 분리해 트리형태 구조로 파싱. 쿼리의 문법적 오류를 해당 SQL Parser가 발견하고 오류 전달
    • 전처리기 : 파서 트리 내 토큰과 개체(컬럼명, 내장함수, 객체 접근권한)를 비교해 쿼리 문장의 구조적 오류 확인. 존재하지 않는 토큰, 권한 오류를 해당 전처리기가 발견하고 오류 전달
    • 옵티마이저 : 클라이언트가 요청한 쿼리에 대해 최적(최저비용)의 처리경로(방법)을 결정하는 DBMS 내부의 핵심엔진. Index와 같은 처리는 결국 옵티마이저가 최적의 처리경로를 결정할 수 있도록 유도함으로써 성능의 향상을 꾀하는 것. 이렇게 옵티마이저가 생성한 최적의 처리경로를 실행계획(Execution Plan)이라 한다.

 

스토리지 엔진

  • MySQL 서버의 가장 밑단에서 실제 디스크에 접근하여 데이터를 읽고, 디스크에 데이터를 쓰는, 디스크에 실질적으로 Read/Write 작업을 수행하는 역할
  • MySQL의 대표적인 스토리지 엔진은 MyISAM과 InnoDB가 있으며, 기능과 성능 상 차이로 주로 InnoDB를 채택.

 

MySQL 엔진, 스토리지 엔진을 거쳐가는 쿼리의 전체적인 실행 구조

  1. 클라이언트의 SQL(쿼리) 요청
  2. SQL Parser가 쿼리를 토큰으로 분리해 파서 트리 구성. 쿼리의 문법적 오류 확인
  3. 파서 트리를 기반으로 전처리기가 쿼리의 구조적 오류 확인
  4. 옵티마이저가 Index와 같은 조건을 활용하여 쿼리 실행 비용 최적화. 실행계획 생성
  5. 스토리지 엔진에게 쿼리를 통한 실제 디스크 R/W 요청
  6. 스토리지 엔진이 디스크에서 R/W 수행

 

 

 

 

 

3. 정리

  • 단순히 MySQL이 커넥션, 쿼리 파싱, 데이터 R/W을 수행한다고 생각하지 말자.
  • MySQL의 아키텍처 내에서 각 작업이 수행되는 컴포넌트를 구분지어 기억하면 좋을 것이라고 생각한다.
    • 실제 MySQL의 전체적인 동작을 분리된 역할로서 이해
    • 이를 통해 쿼리 최적화 / 오류 디버깅 등에서 핵심이 되는 컴포넌트에만 집중할 수 있는 안목을 기를 수 있을 것

 


Reference