본문 바로가기
ComputerScience/RealMySQL

4.MySQL 아키텍처 - 4.1 MySQL 엔진 아키텍처(1)

by 규난 2022. 11. 22.
728x90

MySQL 서버는 사람의 머리 역할을 담당하는 MySQL 엔진과 손발 역할을 담당하는 스토리지 엔진으로 구분할 수 있다.

 

MySQL 서버의 전체 구조

MySQL 엔진

클라이언트로부터 접속 및 쿼리 요청을 처리하는 커넥션 핸들러와 SQL 파서 및 전처리기, 쿼리의 최적화된 실행을 위한 옵티마이저가 중심을 이루고 있다. 또한 표준 SQL(ANSI SQL)문법을 지원하기 때문에 표준 문법에 따라 작성된 쿼리는 타 DBMS와 호환되어 실행될 수 있다.

 

MySQL 스토리지 엔진

실제 데이터를 디스크 스토리지에 저장하거나 디스크 스토리지로부터 데이터를 읽어오는 부분을 담당한다. MySQL 서버는 하나지만 스토리지 엔진은 여러개를 동시에 사용할 수 있다. 테이블 생성시 스토리지를 지정하면 테이블에 모든 작업은 정해진 스토리지 엔진이 처리하게 된다. MySQL 엔진은 쿼리 실행기에서 데이터를 쓰거나 읽어야 할 때는 각 스토리지 엔진에 쓰기 또는 읽기를 요청하는데 이때 해당 스토리지 엔진은 핸들러 API를 이용해 MySQL 엔진과 데이터를 주고 받는다.

 

MySQL 스레딩 구조

 

MySQL 스레딩 모델

MySQ 서버는 프로레스 기반이 아니라 스레드 기반으로 작동하며, 크게 포그라운드 스레드(Foreground Thread)와 백그라운드 스레드(Background Thread)로 구분할 수 있다. 

 

포그라운드 스레드(Foreground Thread)

최소한 MySQL 서버에 접속된 클라이언트 수 만큼 존재하며, 주로 각 클라이언트 사용자가 요청하는 쿼리 문장을 처리한다. 클라이언트 사용자가 작업을 마치고 커넥션을 종료하면 해당 커넥션을 담당하던 스레드는 다시 스레드 캐시에 되돌아간다. 이미 스레드 캐시에 일정 개수 이상의 대기 중인 스레드가 있으면 스레드 캐시에 넣지 않고 스레드를 종료시커 일정 개수의 스레드만 스레드 캐시에 존재하게 한다. 스레드 캐시에 유지 할 수 있는 최대 스레드 개수는 thread_cache_size 시스템 변수로 설정이 가능하다.

 

포그라운드 스레드는 데이터를 MySQL 데이터 버퍼나 캐시로 부터 가져오며, 버퍼나 캐시에 없는 경우에는 직접 디스크의 데이터나 인덱스 파일로부터 데이터를 읽어와서 작업을 처리한다. MyISAM 스토리지 엔진은 디스크 쓰기 작업까지 포그라운드 스레드에서 처리하지만 InnoDB 스토리지 엔진은 데이터 버파나 캐시까지만 포그라운드 스레드에서 처리하고, 나머지 버퍼로부터 디스크까지 기록하는 작업은 백그라운드 스레드에서 처리한다.

 

백그라운드 스레드(Background Thread)

InnoDB는 다음과 같이 여러가지 작업이 백그라운드로 처리된다.

  • 인서트 버퍼(Insert Buffer)를 병합하는 스레드
  • 로그를 디스크로 기록하는 스레드(중요)
  • InnoDB 버퍼 풀의 데이터를 디스크에 기록하는 스레드(중요)
  • 데이터를 버퍼로 읽어 오는 스레드
  • 잠금이나 데드락을 모니터링하는 스레드

 

728x90