Database
[Real MySQL, 3장 - 아키텍처] MySQL 엔진, 스토리지 엔진
빠쿤
2023. 9. 13. 00:28
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 엔진, 스토리지 엔진을 거쳐가는 쿼리의 전체적인 실행 구조
- 클라이언트의 SQL(쿼리) 요청
- SQL Parser가 쿼리를 토큰으로 분리해 파서 트리 구성. 쿼리의 문법적 오류 확인
- 파서 트리를 기반으로 전처리기가 쿼리의 구조적 오류 확인
- 옵티마이저가 Index와 같은 조건을 활용하여 쿼리 실행 비용 최적화. 실행계획 생성
- 스토리지 엔진에게 쿼리를 통한 실제 디스크 R/W 요청
- 스토리지 엔진이 디스크에서 R/W 수행
3. 정리
- 단순히 MySQL이 커넥션, 쿼리 파싱, 데이터 R/W을 수행한다고 생각하지 말자.
- MySQL의 아키텍처 내에서 각 작업이 수행되는 컴포넌트를 구분지어 기억하면 좋을 것이라고 생각한다.
- 실제 MySQL의 전체적인 동작을 분리된 역할로서 이해
- 이를 통해 쿼리 최적화 / 오류 디버깅 등에서 핵심이 되는 컴포넌트에만 집중할 수 있는 안목을 기를 수 있을 것
Reference