반응형
05-15 00:00
Today
Total
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
관리 메뉴

개발하는 고라니

[Database] MySQL 아키텍쳐 본문

Database/MySQL

[Database] MySQL 아키텍쳐

조용한고라니 2022. 1. 9. 18:54
반응형

MySQL Architecture

MySQL 서버

  • MySQL 엔진 (머리)
  • 스토리지 엔진 (손, 발)
    • InnoDB 스토리지 엔진
    • MyISAM 스토리지 엔진

출처: https://junghyungil.tistory.com/135

 

※ 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)
  • 데이터를 버퍼로 읽어 오는 스레드
  • 잠금이나 데드락을 모니터링하는 스레드

메모리 할당 및 사용 구조

출처: https://velog.io/@jsj3282/3.-MySQL-%EC%95%84%ED%82%A4%ED%85%8D%EC%B2%98

 

※ 글로벌 메모리 영역

 

- 일반적으로 클라이언트 스레드 수와 무관하게 하나의 메모리 공간만 할당됨

- 단, 설정에 따라 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
Comments