1. MySQL 서버 전체 구조

MySQL 엔진
MySQL 엔진은 커넥션 관리, SQL 명령어 처리, 캐시 & 버퍼 관리, 스레드 관리 등을 담당합니다.
- 커넥션 핸들러: MySQL 서버 사용자인 응용 프로그램과 커넥션을 체결합니다.
- SQL 인터페이스: 사용자가 작성한 SQL 명령어를 DBMS 서버 내부로 전달합니다.
- SQL 파서: SQL 명령어를 분석해 Syntax Tree를 형성한 뒤 옵티마이저에게 전달합니다.
- SQL 옵티마이저: SQL 명령어를 최적화해 실행 계획을 세웁니다.
- 캐시 & 버퍼: 데이터를 메모리에 저장하여 성능을 향상시킵니다.
스토리지 엔진
- 데이터 저장 방식을 관리하고 실제 물리적 디스크에 접근합니다.
- InnoDB와 MyISAM 등이 대표적인 스토리지 엔진입니다.
핸들러 API
- MySQL 엔진과 스토리지 엔진은 둘 사이에 핸들러 API를 통해 데이터를 주고 받습니다.
- MySQL 엔진은 일관된 핸들러 API를 호출함으로써 다양한 스토리지 엔진을 사용할 수 있습니다.
- 핸들러 API 스펙에 맞춰 스토리지 엔진을 직접 구현해 사용할 수도 있습니다.
2. MySQL 스레딩 구조

- MySQL 엔진 영역
- Foreground Thread: 사용자와의 연결을 관리, SQL 요청을 처리하는 스레드
- Thread Cache: 포그라운드 스레드를 재사용할 목적으로 보관하는 영역
- Chache & Buffer: 데이터 및 인덱스 페이지를 메모리에 캐싱해 성능을 향상시킨다.
- 스토리지 엔진 영역
- Background Thread: 스토리지 엔진에서 발생하는 다양한 백그라운드 작업을 처리하는 스레드 (InnoDB의 경우 더티 페이지 플러시, 로그 쓰기, 트랜잭션 정리 등을 처리)
- Log Buffer: 트랜잭션 로그를 메모리에 임시로 저장하여 디스크에 기록하기 전에 성능을 향상시킨다.
- Log File: 디스크에 저장된 트랜잭션 로그 파일
- Data File: 디스크에 저장된 실제 데이터 파일
3. 읽기/쓰기 처리 흐름
읽기 작업 - SELECT
- Foreground Thread가 요청된 데이터를 버퍼 풀에서 찾는다.
- 버퍼 풀에 데이터가 존재하면 (캐시 히트) 바로 반환한다.
- 버퍼 풀에 데이터가 없으면 (캐시 미스) 디스크에서 데이터를 읽어와 버퍼 풀에 저장한 후 반환한다.
쓰기 작업 - INSERT, UPDATE, DELETE
- Foreground Thread가 변경된 데이터를 쓰기 지연 버퍼에 저장한다.
- 사용자에게 작업 완료 응답을 반환한다.
- Background Thread가 주기적으로 쓰기 지연 버퍼의 데이터를 디스크에 기록한다.
Reference
- 도서 Real MySQL 8.0 - 4장 MySQL 엔진
'개발 > 데이터베이스' 카테고리의 다른 글
[MySQL] 인덱스를 사용하는 이유, B-Tree 구조 및 동작 방식 (0) | 2024.07.18 |
---|