- Today
- Total
개발하는 고라니
[Database] MySQL 아키텍쳐 본문
MySQL Architecture
MySQL 서버
- MySQL 엔진 (머리)
- 스토리지 엔진 (손, 발)
- InnoDB 스토리지 엔진
- MyISAM 스토리지 엔진
※ MySQL 엔진?
- 클라이언트로부터 접속 및 쿼리 요청을 처리하는 Connection Handler와 SQL Parser 및 전처리기, 쿼리의 최적화된 실행을 위한 옵티마이저가 중심을 이루며, MySQL은 ANSI SQL을 지원하기 때문에 표준 문법에 따라 작성된 쿼리는 타 DBMS와 호환되어 실행 O
※ 스토리지 엔진?
- MySQL 엔진은 요청된 SQL을 분석하거나 최적화하는 처리를 수행한다.
- 이에 반해 스토리지 엔진은 실제 데이터를 디스크 스토리지에 저장하거나, 디스크 스토리지로부터 데이터를 읽어오는 부분을 전담한다.
- MySQL 서버에서 MySQL 엔진은 1개이나, 스토리지 엔진은 여러 개를 동시에 사용할 수 있다.
mysql > CREATE TABLE sample (col1 VARCHAR, col2 INT) ENGINE=InnoDB;
- 각 스토리지 엔진은 성능 향상을 위해 키 캐시(MyISAM 스토리지 엔진)나 InnoDB 버퍼 풀 (InnoDB 스토리지 엔진)과 같은 기능을 내장
※ 핸들러 API?
- MySQL 엔진의 쿼리 실행기에서 데이터 입출력에 각 스토리지 엔진에 요청하는데, 이러한 요청을 핸들러(Handler) 요청이라 한다.
- 여기서 사용되는 API를 핸들러 API라 한다.
- InnoDB 스토리지 엔진 또한 이 핸들러 API를 이용해 MySQL 엔진과 데이터를 주고받는다.
MySQL 스레딩 구조
※ 포그라운드 스레드 (클라이언트 스레드)
- 포그라운드 스레드는 최소한 MySQL 서버에 접속된 클라이언트 수만큼 존재한다.
- 주로 각 클라이언트 사용자가 요청하는 쿼리를 처리한다.
- 클라이언트 사용자가 작업을 마치고 커넥션을 종료하면, 해당 커넥션을 담당하던 스레드는 다시 스레드 캐시(Thread Cache)로 돌아간다.
- 이때 이미 스레드 캐시에 일정 개수 이상의 대기 중인 스레드가 있으면 그냥 종료시켜 스레드 캐시의 일정 개수를 맞춘다.
- 스레드 캐시의 유지할 수 있는 최대 스레드 개수는 'thread_cache_size' 시스템 변수로 제어한다.
- 포그라운드 스레드는 데이터를 MySQL의 데이터 버퍼나 캐시로부터 가져오며, 버퍼나 캐시에 없는 경우 직접 디스크의 데이터나 인덱스 파일로부터 데이터를 읽어와 작업을 처리한다.
- MyISAM 테이블은 디스크 쓰기 작업까지 포그라운드 스레드가 처리한다.
- InnoDB 테이블은 데이터 버퍼나 캐시까지만 포그라운드 스레드가 처리하고, 나머지 버퍼로부터 디스크까지 기록하는 작업은 백그라운드 스레드가 처리한다.
- 포그라운드 스레드 == 사용자 스레드
※ 백그라운드 스레드
- InnoDB는 여러 작업이 백그라운드로 처리된다.
- Insert Buffer를 병합하는 스레드
- 로그를 디스크로 기록하는 스레드 (write thread)
- InnoDB 버퍼 풀의 데이터를 디스크에 기록하는 스레드 (write thread)
- 데이터를 버퍼로 읽어 오는 스레드
- 잠금이나 데드락을 모니터링하는 스레드
메모리 할당 및 사용 구조
※ 글로벌 메모리 영역
- 일반적으로 클라이언트 스레드 수와 무관하게 하나의 메모리 공간만 할당됨
- 단, 설정에 따라 2개 이상의 메모리 공간을 할당받을 수 있으나, 스레드 수와 무관하며, 모든 스레드는 글로벌 메모리 영역을 공유한다.
※ 세션(로컬) 메모리 영역
- MySQL 서버상에 존재하는 클라이언트 스레드가 쿼리를 처리하는데 사용하는 메모리 영역.
- 각 클라이언트 스레드별 독립적으로 할당됨
- 절대 공유되지 않는다.
...
#Reference
백은빈 & 이성욱. 2021. Real MySQL 8.0 (1 ,전면 개정판). 위키북스.
'Database > MySQL' 카테고리의 다른 글
[Database] MySQL 설치 및 설정 (0) | 2022.01.09 |
---|---|
[MariaDB] 계정 생성 (0) | 2021.02.07 |
[MariaDB] 데이터베이스 생성 (0) | 2021.02.07 |